****** 数据持久化常用的五种方式 ******
1.plist文件(属性列表)
2.preference(偏好设置)
3.NSKeyedArchiver(归档)
4.SQLite 3
5.CoreData
*---- 沙盒路径下的三个文件(Documents/Library/tmp) -----*
/**** "应用程序包": 这里面存放的是应用程序的源文件,包括资源文件和可执行文件 ****/
NSString *path = [[NSBundle mainBundle] bundlePath];
/*** Documents: 最常用的目录,iTunes同步该应用时会同步此文件夹中的内容,适合存储重要数据 ***/
NSString *Documentspath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
/*** Library/Caches: iTunes不会同步此文件夹,适合存储体积大,不需要备份的非重要数据 ***/
/** Library/Preferences: iTunes同步该应用时会同步此文件夹中的内容,通常保存应用的设置信息 **/
NSString *Cachespath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
/** tmp: iTunes不会同步此文件夹,系统可能在应用没运行时就删除该目录下的文件,所以此目录适合保存应用中的一些临时文件,用完就删除 **/
NSString *Preferencespath = NSTemporaryDirectory();
1.plist文件(属性列表)
****** 手动新建一个 Property List 文件 ******
可以手动添加各类数据
NSString *plistPath = [[NSBundle mainBundle]pathForResource:@"Property List" ofType:@"plist"];
NSMutableDictionary *dataDic = [[NSMutableDictionary alloc]initWithContentsOfFile:plistPath];
NSLog(@"%@",dataDic);//直接打印刚刚写入的数据
****** 代码创建plist文件 ******
//获取路径对象
NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [pathArray objectAtIndex:0];
//获取文件的完整路径
NSString *filePatch = [path stringByAppendingPathComponent:@"column.plist"];
NSLog(@"%@",filePatch);//打印创建好的plist文件路径
//写入数据到plist文件
NSMutableDictionary *dic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"小小虎",@"name",@"5",@"age",@"boy",@"sex",nil];
NSMutableDictionary *dic2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"小小兮",@"name",@"6",@"age",@"girl",@"sex",nil];
//将上面2个小字典保存到大字典里面
NSMutableDictionary *dataDic = [NSMutableDictionary dictionary];
[dataDic setObject:dic1 forKey:@"一年级"];
[dataDic setObject:dic2 forKey:@"二年级"];
//写入plist里面
[dataDic writeToFile:filePatch atomically:YES];
//读取plist文件的内容
NSMutableDictionary *dataDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:filePatch];
NSLog(@"---plist一开始保存时候的内容---%@",dataDictionary);
****** plist文件的增删改查 ******
//修改字典里面的内容,先按照结构取到你想修改内容的小字典
NSMutableDictionary *dd = [dataDictionary objectForKey:@"一年级"];
[dd setObject:@"111111" forKey:@"name"]; //修改
[dd setObject:@"222222" forKey:@"content"]; //增加
[dd removeObjectForKey:@"age"]; //删除
//注意bool值的修改与一般值修改不一样,是需要nsnumber作为中间转换
//修改成功以后,将这个小字典重新添加到大字典里面
[dataDictionary setObject:dd forKey:@"一年级"];
[dataDictionary writeToFile:filePatch atomically:YES];
NSLog(@"---plist做过操作之后的字典里面内容---%@",dataDictionary);
****** 清除plist文件 ******
//清除plist文件,可以根据我上面讲的方式进去本地查看plist文件是否被清除
NSFileManager *fileMger = [NSFileManager defaultManager];
NSString *xiaoXiPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"column.plist"];
//如果文件路径存在的话
BOOL bRet = [fileMger fileExistsAtPath:xiaoXiPath];
NSLog(@"清除plist文件=%d",bRet);
if (bRet) {
NSError *err;
BOOL isDelete = [fileMger removeItemAtPath:xiaoXiPath error:&err];
//已清除,打印的文件路径打不到了 - xiaoXiPath
NSLog(@"清除plist文件的路径%@=%d",xiaoXiPath,isDelete);
}