【IOS沉思录】IOS的数据持久化(plist文件读写操作)

参考原文: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)。一般情况下是一个数组,存储多条数据。

IOS的数据持久化(plist文件读写操作与简单数据存取)

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"]);

5,如果document里没有此文件,会自动创建,读取赋值后,便可使用,同时可以add,update,和remove。
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"];
2.增删改。
   [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"];//删除对象数据
3.操作之后记得Synchronize同步操作,否则偶然会因为别的线程占大量内存而没有保存成功[defaults synchronize];  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_厚厚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值