数据持久化-plist文件的操作

在实际项目开放中数据持久化是程序核心结构之一,适当的对数据进行持久化存储可以实现应用的离线功能,以此提高用户体验。常见的数据持久化有:

* preference(偏好设置)
* NSKeyedArchiver(归档)
* plist文件(属性列表)
* SQLite 3
* CoreData

本篇文章主介绍数据持久化中的plist文件的增删查改,其他数据方法会在后面的文章中体现。

沙盒

在介绍各种存储方法之前,先说明下沙盒机制。每个ios应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离。应用必须待在自己的沙盒中。打开Finder窗口,点击“前往”,然后按住option键进入“资源库”文件夹中,向下找到Developer/CoreSimulator/Devices这些子目录对应的是每个模拟器,进入子目录中进入Containers/Data/Application 然后任意打开一个子目录会看到应用沙盒文件系统目录

沙盒的目录结构如下:

Documents
Library
    Caches
    Preferences
tmp

Documents:最常用的目录,可以将应用程序数据储存在Document目录中,如果应用启用了Itunes文件分享功能,Itunes同步设备时会备份该目录,例如游戏存档,适合存储重要数据。

//获取Document路径
  NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;

 //其中NSDocumentDirectory 我们要找的Documents目录,NSUserDomainMask从用户文件夹下找,YES/NO 是否获取全路径一般YES ,数组中firstObject处必定是Document目录

Library/Caches: 保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录,一般储存体积大,不需要备份的数据

NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSLog(@"cachePath = %@",cachePath);

Library/Preferences: iTunes同步该应用时会同步此文件夹中的内容,通常保存应用的设置信息。

NSString *prePath = [NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES) lastObject];
NSLog(@"prePath = %@",prePath);

tmp: 供应用储存临时文件,使用完毕后再将相应的文件从该目录删除,当ios设备同步时不会备份这个文件。

  NSString *path = NSTemporaryDirectory();
  NSLog(@"%@", path);

plist只能存储系统自带的一些常规的类, 也就是有writeToFile方法的对象才可以使用plist保存数据
可储存的数据有:

1. NSArray;
2. NSMutableArray;
3. NSDictionary;
4. NSMutableDictionary;
5. NSData;
6. NSMutableData;
7. NSString;
8. NSMutableString;
9. NSNumber;
10. NSDate;

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
 //拼接文件路径
NSString *plistPath = [path stringByAppendingPathComponent:@"person.plist"];

//存入数据
NSDictionary *dic = @{@"name":@"张三",@"age":@(20)};
[dic writeToFile:plistPath atomically:YES];

 //读取数据
NSMutableDictionary *dic1 = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
 NSLog(@"dic1 = %@",dic1);

//增加数据
[dic1 setObject:@"男" forKey:@"sex"];
[dic1 writeToFile:plistPath atomically:YES];

//修改数据
NSMutableDictionary *dic2 = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
    NSLog(@"dic2 = %@",dic2);

注意

  • 只有以上列出的类型才能使用plist文件存储。

  • 存储时使用writeToFile: atomically:方法。 其中atomically表示是否需要先写入一个辅助文件,再把辅助文件拷贝到目标文件地址。这是更安全的写入文件方法,一般都写YES。

  • 读取时使用dictionaryWithContentsOfFile:方法。

读取本地的plist文件


 NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"PropertyDemo" ofType:@"plist"];

 NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
 NSLog(@"plist文件中得内容%@",userInfo);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值