标签:
首先得了解SandBox沙盒 本质就是一个提供给我们app的专用文件夹
我们可以获取到沙盒的path:NSString *home = NSHomeDirectory();
打印出来复制可以通过Finder-前往-前往文件夹就看可以找到在mac下该项目沙盒的位置了
各位刚接触ios的童鞋应该知道在Bundle中包含了所有的资源文件和可执行文件
在沙盒目录下我们可以看到三个文件夹Documents、
Library以及tmp,其中Library下还包含两个目录:
Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应
用可将游戏存档保存在该目录
Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般
存储体积较大、不需要备份的非重要数据
Library/Preference:保存应用的所有偏好设置,iOS的设置应用会在该目录中查找应用的设置信息。
iTunes同步设备时会备份该目录
tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系
统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录
实例:
#import "ViewController.h" #import "Person.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //文件 plist //获取沙盒path NSMutableDictionary *dic; //获取到沙盒路径 追加上沙盒下的documents目录 以及该目录下的一个文件 NSString *path=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/cities.plist"]; NSLog(@"%@",path);//可以看到app沙盒在mac下的位置 //判断文件是否存在 if(![[[NSFileManager alloc]init] fileExistsAtPath:path]) { //文件不存在即从远程服务器获取 这里在本地bundle放了一个名为cities的plist文件用来获取作为示例 dic=[NSMutableDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"cities" ofType:@"plist"]]; } else { //文件存在则读取 dic=[NSMutableDictionary dictionaryWithContentsOfFile:path]; } NSLog(@"读取到的文件%@",dic); //写入文件到沙盒 writetofile 该方法同样可用于nsstring array data等 [dic writeToFile:path atomically:YES]; //-------------------------------- //用户配置 使用NSUserDefaults //我们可以再里面保存用户名以及密码实现保存登录状态 [[NSUserDefaults standardUserDefaults] setObject:@"abc" forKey:@"username"]; [[NSUserDefaults standardUserDefaults] setObject:@"123" forKey:@"password"]; //读取 NSString *uName=[[NSUserDefaults standardUserDefaults] objectForKey:@"username"]; //在info.plist中保存有版本信息 使用用户配置保存版本信息来核对是否第一次打开app以显示特性 //通常在AppDelegate中进行判断 //获取info中的版本信息 NSDictionary *infoDic=[[NSBundle mainBundle] infoDictionary]; NSString *str=infoDic[@"CFBundleShortVersionString"];//app版本信息 //接下来判断用户配置中是否有版本信息 如果有是否和当前app版本信息相同 如果没有或者不同则表示第一次打开该版本的app则显示特性介绍 //-------------------------------- //归档 解档 NSString *dataPath=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/info.m" ]; //通常用来将自定义存放在文件中 //这里我们定义一个Person类为例子 自定义类需要遵守NSCoding协议实现·encodeWithCoder initWithCoder两个方法 Person *p=[[Person alloc]init]; [p setName:@"Liu"]; [p setAge:15]; NSMutableData *data=[NSMutableData data];//用来存放编码后的数据 //创建一个归档器 NSKeyedArchiver *arch=[[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [arch encodeObject:p forKey:@"Person"];//将person对象编码并设置一个key [arch finishEncoding];//需要结束编码 //写入到文件 [data writeToFile:dataPath atomically:YES]; //解档 NSKeyedUnarchiver *uarch=[[NSKeyedUnarchiver alloc]initForReadingWithData:[NSData dataWithContentsOfFile:dataPath]]; Person *per=[uarch decodeObjectForKey:@"Person"]; NSLog(@"%@----%d",per.name,per.age); } @end
person类 包含name和age两个属性:
#import "Person.h" @interface Person()<NSCoding> @end @implementation Person -(id)initWithCoder:(NSCoder *)aDecoder { if(self=[super init]) { _name=[aDecoder decodeObjectForKey:@"name"]; _age=[[aDecoder decodeObjectForKey:@"age"] integerValue]; } return self; } -(void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:_name forKey:@"name"]; [aCoder encodeObject:@(_age) forKey:@"age"]; } @end
[IOS:OC]数据存储:文件/用户配置/归档的作用以及用法实例
标签:
原文地址:http://www.cnblogs.com/A-Nian/p/4943436.html