数据持久化--数据存储到本地

苹果手机为了保证自己的数据上的绝对安全.设计了沙盒文件,每一个应用程序都配备了自己的沙盒文件,每一次运行,文件夹的名字就会变成一个没有任何规律的字符串,
第一个参数:当前要前往哪一个文件夹,前往 documents 文件用 NSDocumentDirectory,64行那个,还可以前往caches文件夹,对应68行;
第二个参数:访问的文件夹类型,指定访问是用户文件夹
第三个参数:绝对路径(YES),相对路径(NO);绝对路径是给系统来使用的,系统可以根据当期那的路径找到文件夹,我们在操作文件的时候都是在用绝对路径,
相对路径自会把要前往的文件夹显示出来,其他部分是~,告诉程序员要去那个文件

NSAray *sandBox  = NSSearchPathForDirectoriesInDomains(NSCachesDirestory,NSUserDomainMask,YES);

沙盒里一共有三个文件
1.是Documents文件:主要是用来存储用户想要存储的一些信息,比如收藏的信息或者自己设置的一些内容,所以我们做收藏功能就是往这个文件夹里写文件
2.是library文件夹是方便程序开发者使用的,主要操作它里的两个文件夹caches 和 Preferences
caches:用来保存缓存文件,SDWebImage会把图片加到缓存文件中,所以缓存功能就是把这个文件夹删除.
Preferences一般来保存程序员设置的信息,比如NSUerDefaults就会把数据保存在这个文件夹里
3.tmp文件:一般存放临时内容,
之前沙盒还有一个.app文件,在新的版本中已经移除走了.

把简单对象写入到本地,简单对象指定是NSString,NSArray等

1.先通过数组获取沙盒路径
    NSArray *sandBox = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    //从数组中获取沙盒路径
    NSString *sandBoxPath = sandbox[0];
    //给要写入的文件拼接一个路径,拼接的方式有两种
    NSString *documentPath = [sandbox stringByAppendingString:@"/高高姐.txt"];
    或者
    NSString *documentPath = [sandbox stringByAppendingPathComponent:@"高高姐.txt"];
    两者的区别是第一种的加 / 第二种不用
2.把字符串写入到本地
     NSString *str = @"过道小高哈哈哈";
   //把字符串写入到本地 第一个参数是文件要保存的路径,第二个是文件进行保护 YES 第三个是文件的错误信息
   [str writeToFile:documentPath atomically:YES Encoding:NSUTF8StringEncoding error:nil];
   如果路径下有对应文件,则会把原来问价覆盖,如果没有则是创建一个新的文件;

把沙盒文件再读取出来

NSString *tempStr = [NSString stringWithContensOfFile:document encoding:NSUTF8StringEncoding error:nil];

同样把数组和字典写入到本地方法一样,姿势在读取的时候得用相同类型的读取

复杂对象写入到本地,主要指我们自己创建的对象写入到本地,也叫归档和反归档操作.

//归档操作
//之前定义一个Student类并创建对象
    Student *stu = [Student stuentWithName:@"高高姐" Sex:@"未知" Age:88 Hobby:@"奇哥"];
    //1.通过数组沙盒
     NSArray *sandBox = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    //2.用字符串接受沙盒路径
    NSString *sandBoxPath = sandBox[0];
    //3.接受文件夹路径,这个文件的扩展名时任意
    NSString *documentpath = [sandBoxPath stringByAppendingPathComponent:@"学生.avi"];
    //4.对对象进行归档操作
        //第一个参数:要实施归档的对象
        //第二个参数:路径
    [NSKeyedArchiver archiverRootObject:stu toFile:documentPath];
//反归档操作
Student *newStudent [NSKeyedUnarchiver UnarchiverObjectWithFile:document];

在反归档的时候接受者得和我们找到的对象的类型相同

总结:数据持久化的步骤
1.指定前往的文件夹
2.用字符串接收路径
3.拼接文件路径
4.写入本地或者归档操作
如果要是复杂对象归档,要签订NSCoding方法,并且实现两个协议方法,放在数组里的复杂对象归档也要签订协议

当我们想对文件夹进行操作的时候,得通过文件夹管理者 NSFileManager

//通过文件管理者对文件夹进行操作
     NSArray *sandBox = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
     NSString *sandBoxPath = sandBox[0];
    //创建一个文件管理者
    NSFileManager *manager = [NSFileManger defaultManager];
    //给要创建的文件夹拼接一个路径
    NSString *filePath = [sandBoxPath stringByAppendingPathComponent:@"gaodaren"];
        //文件夹不需要扩展名
        //通过manager进行创建
       [manager createDirectoryAtPahth:filePath WithIntermediateDirectories:YES attributes:nil error:nil];
      //向新创建的文件夹洗一个字符串
     NSString *str = @"asdfasf";
     NSString *strPath = [filePath stringByAppendingPathComponent:@"haha.txt"];
     [str writeToFile:strPath atomically:YES encoding:NSUTF8StringEncoding error:nil];

//移除文件夹
[manager removeItemAtPath:filepath error:nil];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值