参考原文:http://blog.youkuaiyun.com/mad1989/article/details/8560796
一.plist文件
全名是:Property List,属性列表文件,它是一种用来存储串行化后的对象的文件。属性列表文件的扩展名为.plist ,因此通常被称为plist文件。文件是xml格式的。Plist文件通常用于储存用户设置,也可以用于存储捆绑的信息
二.文件保存到的几个位置
1. 工程沙盒里(就是程序user Document文件夹下,以读取文件,写入文件方式,可更新数据,每次写入覆盖之前的数据)
2. 工程自身里(就是在工程里手动创建一个如.plist文件,把固定的内容写入,这个需要人工手动写入,不可用代码更新)
3. 工程沙盒里(保存到userDocument下,不过不需要读写文件,用系统的 NSUserDefaults可以快速保存添加读取删除基本数据类型,类似于android里的Sharedpreferences )
工程下的.plist是我们不能在代码中写入的,可以读取,但是不可以写入,所以,代码中进行文件写等操作只能在沙盒路径下的文件中操作。
三.创建工程里的plist并读取,数据存入沙盒以及从沙盒读取数据
1. 创建plist文件。
File —> New—> NewFile,选择Resource下的PropertyList,plist文件(root)可以是一个不可变数组(NSArray),也可以是一个字典(NSDictionary)。一般情况下是一个数组,存储多条数据。
2. 工程路径plist文件读取。
//读取工程中的plist文件,这里设置的工程的plist是一个字典,也可以用数组plist
NSMutableDictionary *data= [[NSMutableDictionary alloc]initWithContentsOfFile:[[NSBundlemainBundle]pathForResource:@"test"ofType:@"plist"]];
//添加新数据到字典对象中
[data setObject:@"sdbgbesdgjkds"forKey:@"d"];
3.创建沙盒plist文件并将数据存入
*plist文件路径一定要加“/” !!!
*第一次写入沙盒必须要将工程中的plist读出来写入,不能直接往沙盒里写NSArray或者NSDictionary!要先创建文件存入沙盒!
// 获取沙盒路径,这里"/demo.plist"是指新建的沙盒里plist文件路径,一定要加“/”!!!
NSString *filePath= [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject]stringByAppendingPathComponent:@"/demo.plist"];
//将工程中的数据新字典写入沙盒
[data writeToFile:filePathatomically:YES];
4.读取沙盒plist文件
//获取已经创建的沙盒plist文件路径
NSString *filepath= [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0]stringByAppendingPathComponent:@"/demo.plist"];
//获取此路径下的我们需要的数据
NSDictionary *testDic= [[NSDictionary alloc]initWithContentsOfFile:filepath];
//打印之前存入沙盒的新数据
NSLog(@"d:%@", [testDic objectForKey:@"d"]);
if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
[[NSFileManager defaultManager] removeItemAtPath:path error:nil];
}
四.NSUserDefault快速读写
1.利用系统提供的方法,我们可以快速保存简单数据类型,如用户登录用户名密码。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];//获取标准函数对象
NSMutableDictionary *defaultcoordinate = [defaults objectForKey:@"default_coordinate"];//通过对象获取名称下NSMutableDictionary数据
NSString *currentCity = [defaultcoordinate objectForKey:@"c_name"];
[defaults setObject:@"kaka"forKey:@"newdata"];//添加id对象类型数据
[defaults objectForKey:@"newdata"];//获取对象类型数据
[defaults setDouble:2013forKey:@"double"];//添加double类型数据
[defaults doubleForKey:@"double"];//获取double类型数据
[defaults setBool:NO forKey:@"BOOL"];//添加BOOL类型数据
[defaults boolForKey:@"BOOL"];//获取BOOL类型数据
[defaults setInteger:12 forKey:@"int"];//添加int类型数据
[defaults integerForKey:@"int"];//获取int类型数据
[defaults setFloat:0.23 forKey:@"float"];//添加Float类型数据
[defaults floatForKey:@"float"];//获取float类型数据
[defaults removeObjectForKey:@"newdata"];//删除对象数据