数据持久化,简单对象写入本地,复杂对象写入本地

#import "MainViewController.h"
#import "Student.h"
@interface MainViewController ()
@end
@implementation MainViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    //数据持久化  ,本地存贮
    //1.通过代码找到当前应用程序的沙盒路径
    //函数:  参数1:要找沙盒中的哪个文件夹
    //参数2:在系统的什么地方去找文件夹(在IOS系统下,只能用NSUserDomainMask = 1)
    //参数3:是否是一个绝对路径
//    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//    
//    NSLog(@"documents的路径:%@",paths);
//    
    //三个文件夹的作用
    //1.Documents文件夹:存贮用户的设置,用户需要保存的一些数据
       //限制:如果你在iCloud服务,会把Documents文件中所有的数据都上传到服务器上.iCloud服务器提供空间是有限的(5G),不要贼这个文件夹存储音频/视频/体积比较大的问价;
    //2.Library:  --Caches;缓存文件夹,存贮系统/用户的一些缓存文件(比如:txt/图片/视频/音频...,清楚缓存就是删除这个文件夹)
                //Perferences文件夹:是给开发者使用的偏好设置文件夹,用来存贮应用执行需要的一些数据.
    //3.tmp文件夹:存贮临时文件 ,在版本更新的时候会被删除掉所有内容.
    //4.应用程序的可执行文件(.app),包含这个应用程序执行的所有代码,资源,基本设置,(完全不能被修改)(NSBundle)
    
    //获取app中一个图片路径
    //参数1:资源的文件名
    //参数2:资源的文件类型
//    NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"1-121126113549" ofType:@"jpg"];
//    NSLog(@"%@",imagePath);
//    
//    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    //两种显示图片的方式;
//    UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
//    UIImage *image1 = [UIImage imageNamed:@"1-121126113549.jpg"];
//    imageView.image = [UIImage imageWithContentsOfFile:imagePath];
//    [self.view addSubview:imageView];
    
    //imageNamed加载图片,并且把image缓存到内存里面,
    //imageWithContentsOfFile是只显示图片,但不加到内存中。
    //所以加载大量图片的时候用imageWithContentsOfFile比较好,内存不会变大。
    
    
    //--------------简单的对象写入本地--_-_------------//
    //NSString,NSArray,NSDictionary,,,这种系统自己提供数据容器类产生的对象,称为简单对象
    
    //NSString字符串写入本地
    NSString *string = @"没事儿不要老请假!";
    
    //系统提供的直接写入本地的方法
    //拼接文件路径
    //获取libary的文件夹路径
    NSString *libPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)lastObject];
    
    NSString *strPath = [libPath stringByAppendingString:@"/string.txt"];
    NSLog(@"字符串文件的路径%@",strPath);
    
    //参数1:文件的路径  参数2:是否对存贮的过程进行保护  参数3:对文本的编码方式(utf8)  参数4:错误信息()
    NSError *error = nil;
    [string writeToFile:strPath atomically:YES encoding:NSUTF8StringEncoding error:&error];
    if (error != nil) {
        NSLog(@"错误信息: %@",error);
    }
    
    //从本地读取文件数据
    NSString *readStr = [NSString stringWithContentsOfFile:strPath encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"%@", readStr);
    
    
    
    //数组的读写
    NSArray *array = [NSArray arrayWithObjects:@"aa",@"bb", @"cc", @"dd", @"ee", @"ff", nil];
    
    
    //数组对象的路径拼接
    NSString *arrayPath = [libPath stringByAppendingPathComponent:@"array.plist"];
    [array writeToFile:arrayPath atomically:YES];
    //读取
    NSArray *readArray = [NSArray arrayWithContentsOfFile:arrayPath];
    NSLog(@"%@",readArray);
    
    //使用NSUserDefaults类进行本地存储
    //这是一个可以保存在本地的系统的字典
    //使用一个单例方法 创建这个对象
    //单例  :  设计模式:在一个程序运行中,只会产生一个对象
    NSUserDefaults *userdefaults = [NSUserDefaults standardUserDefaults];
    //使用
    [userdefaults setObject:@"alksdjflkasd" forKey:@"key"];
    //立即写入本地
    [userdefaults synchronize];
    //显示  (判断第一次登陆)
    NSLog(@"%@", [userdefaults objectForKey:@"key"]);
    
    //判断用户是否是第一次使用应用
    if ([[NSUserDefaults standardUserDefaults] objectForKey:@"isFirstLogin"] == nil) {
        //如果第一次使用
        [[NSUserDefaults standardUserDefaults] setObject:@"YES" forKey:@"isFirstLogin"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }else{
        //不是第一次
    }
    
    //4.复杂对象写入本地
    
    Student *stu = [[Student alloc] init];
    stu.name = @"maidong";
    stu.sex = @"nv";
    stu.address = @"liaoningdalian";
    
    //归档类 ,把一个复杂对象写入本地(只能实现有NSCoding协议的)
    //参数1:你要存储的对象(必须是实现<NSCoding>协议)
    //参数2:存储路径
    
    NSString *stuPath = [libPath stringByAppendingString:@"student.suiyi"];
    
    [NSKeyedArchiver archiveRootObject:stu toFile:stuPath];
    [stu release];
    //读取
    //反归档类
    Student *stuRead = [NSKeyedUnarchiver unarchiveObjectWithFile:stuPath];
    NSLog(@"姓名:%@,性别:%@,住址:%@",stuRead.name,stuRead.sex,stuRead.address);
    
    //存储复杂对象的流程
    //1.建立类,实现NSCoding协议,对所有的属性进行编码的解码
    //2.利用归档类(NSKeyedArchinver)对一个类的对象进行归档写入本地
    //3利用反归档类(NSKeyedUnarchiver)对一个路径下的归档文件进行反归档,产生一个新的对象
    
    
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/
@end
时间: 2024-10-24 13:50:11

数据持久化,简单对象写入本地,复杂对象写入本地的相关文章

UI学习笔记---第十四天数据持久化

一.沙盒机制 每个应用程序位于文件系统的严格限制部分 每个应用程序只能在为该程序创建的文件系统中读取文件 每个应用程序在iOS系统内斗放在了统一的文件夹目录下 沙盘路径的位置 1. 通过Finder查找程序沙盘相对路径 ~/Library/Application Support/iPhone Simulator 2. 通过代码查找程序沙盘相对路径 NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory,NSSearc

数据持久化以及沙盒路径

什么是沙盒机制 简单对象写入文件 NSFileManager 复杂对象写入文件 数据持久化 什么是数据持久化? 数据的永久存储 为什么要做数据持久化?:存储在内存中的数据,程序关闭,内存释放,数据丢失,这种数据是临时的,用户下次打开应用程序,还要重新联网去刷新数据,无疑增加了用户的负担 数据持久化的本质:数据保存成文件,存储到程序的沙盒中 什么是沙盒机制? 每个应用程序位于文件系统的严格限制部分 每个应用程序只能在为该程序创建的文件系统中读取文件 每个应用程序在iOS系统内部都放在了统一的文件夹

docker容器实现数据持久化的两种方式及其区别

前言 这篇博文是我对docker实现数据持久化几种方式的特征进行一个总结. 在docker中,它的存储文件系统是在dockerhost上原有的xfs或ext4架设了一层文件系统:overlay2(将此行重点标注的原因就是我在面试中被问到过:docker使用的是什么文件系统?),通过docker info命令可以查看出主机上docker相关的信息,包括支持的网络类型.系统版本.内核版本.docker主机的cpu.内存等信息.如下: 在docker中实现数据持久化有两种方式:Bind mount和D

数据持久化-Plist文件写入

数据持久化,常见4种:归档,plist文件,sqlite,coreData.今天复习的是plist文件读写. // // ViewController.m // Test_Plist // // Created by lidongbo on 14/10/30. // Copyright (c) 2014年 lidongbo. All rights reserved. // #import "ViewController.h" @interface ViewController () @

UI_19 数据持久化(本地存储)

一.数据持久化概述 数据持久化就是数据的永久存储.其本质是将数据保存为文件,存到程序的沙盒中. 1.数据持久化的方式 1.1 writeToFile:简单对象写入文件 1.2 NSUserDefaults:应用程序偏好设置1.3 Sqlite:轻量级关系型数据库,不能直接存储对象(NSData除外),需要用到一些SQL语句,先将复杂对象归档(对象->NSData) 1.4 CoreData:对象型数据库,实质是将数据库的内部存储细节封装 1.5 Plist文件 2.应用程序沙盒 每一应用程序都有

本地数据持久化方法

http://www.jianshu.com/p/86ea6da905cf http://www.cocoachina.com/industry/20130328/5908.html 1. 属性列表(plist)NSUserDefaults 属性列表是一种明文的轻量级存储方式,其存储格式有多种,最常规格式为XML格式.在我们创建一个新的项目的时候,Xcode会自动生成一个info.plist文件用来存储项目的部分系统设置.plist只能用数组(NSArray)或者字典(NSDictionary)

复杂对象写入文件

//简单对象可以通过直接写入文件的方式进行存储,复杂对象我们无法直接写入文件,这个时候需要借助归档和反归档 //归档和反归档并不是数据持久化的方式,而是将复杂对象转化成简单对象的一种方式 Person * per = [Person new];    per.name = @"欧阳冰";    per.gender = @"神秘";    per.hobby = @"美女";    per.age = @"21";      

java中将list、map对象写入文件

链接地址:http://blog.sina.com.cn/s/blog_4a4f9fb50101p6jv.html 推荐:凤爪女瓜子男怪象该谁反思伦敦房价为什么持续暴涨 × wvqusrtg个人中心发博文消息 doudouhe的博客 http://blog.sina.com.cn/dechuan608hewei [订阅][手机订阅] 首页博文目录图片关于我 个人资料 doudouhe 微博 加好友发纸条 写留言加关注 博客等级: 博客积分:842 博客访问:222,144 关注人气:34 获赠金

对象写入文件和从文件中重构到对象

//将对象写入文件中 Game game = new Game(); game.Level = 2; game.Player = "Tom"; FileStream fs = new FileStream(@"game.bak",FileMode.OpenOrCreate,FileAccess.Write); StreamWriter sw = new StreamWriter(fs); sw.WriteLine(game.Player); sw.WriteLine