******? 數(shù)據(jù)持久化常用的五種方式? ******
1.plist文件(屬性列表)
2.preference(偏好設(shè)置)
3.NSKeyedArchiver(歸檔)
4.SQLite 3
5.CoreData
*---- 沙盒路徑下的三個(gè)文件(Documents/Library/tmp) -----*
/**** "應(yīng)用程序包": 這里面存放的是應(yīng)用程序的源文件攀隔,包括資源文件和可執(zhí)行文件 ****/
NSString *path = [[NSBundle mainBundle] bundlePath];
/*** Documents: 最常用的目錄,iTunes同步該應(yīng)用時(shí)會(huì)同步此文件夾中的內(nèi)容,適合存儲(chǔ)重要數(shù)據(jù) ***/
NSString *Documentspath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
/*** Library/Caches: iTunes不會(huì)同步此文件夾,適合存儲(chǔ)體積大拍皮,不需要備份的非重要數(shù)據(jù) ***/
/** Library/Preferences: iTunes同步該應(yīng)用時(shí)會(huì)同步此文件夾中的內(nèi)容瘩欺,通常保存應(yīng)用的設(shè)置信息 **/
NSString *Cachespath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
/** tmp: iTunes不會(huì)同步此文件夾,系統(tǒng)可能在應(yīng)用沒運(yùn)行時(shí)就刪除該目錄下的文件朵栖,所以此目錄適合保存應(yīng)用中的一些臨時(shí)文件近上,用完就刪除 **/
NSString *Preferencespath = NSTemporaryDirectory();
1.plist文件(屬性列表)
****** 手動(dòng)新建一個(gè) Property List 文件 ******
可以手動(dòng)添加各類數(shù)據(jù)
NSString *plistPath = [[NSBundle mainBundle]pathForResource:@"Property List" ofType:@"plist"];
NSMutableDictionary *dataDic = [[NSMutableDictionary alloc]initWithContentsOfFile:plistPath];
NSLog(@"%@",dataDic);//直接打印剛剛寫入的數(shù)據(jù)
****** ?代碼創(chuàng)建plist文件 ******
//獲取路徑對(duì)象
NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [pathArray objectAtIndex:0];
//獲取文件的完整路徑
NSString *filePatch = [path stringByAppendingPathComponent:@"column.plist"];
NSLog(@"%@",filePatch);//打印創(chuàng)建好的plist文件路徑
//寫入數(shù)據(jù)到plist文件
NSMutableDictionary *dic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"小小虎",@"name",@"5",@"age",@"boy",@"sex",nil];
NSMutableDictionary *dic2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"小小兮",@"name",@"6",@"age",@"girl",@"sex",nil];
//將上面2個(gè)小字典保存到大字典里面
NSMutableDictionary *dataDic = [NSMutableDictionary dictionary];
[dataDic setObject:dic1 forKey:@"一年級(jí)"];
[dataDic setObject:dic2 forKey:@"二年級(jí)"];
//寫入plist里面
[dataDic writeToFile:filePatch atomically:YES];
//讀取plist文件的內(nèi)容
NSMutableDictionary *dataDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:filePatch];
NSLog(@"---plist一開始保存時(shí)候的內(nèi)容---%@",dataDictionary);
****** ?plist文件的增刪改查 ******
//修改字典里面的內(nèi)容,先按照結(jié)構(gòu)取到你想修改內(nèi)容的小字典
NSMutableDictionary *dd = [dataDictionary objectForKey:@"一年級(jí)"];
[dd setObject:@"111111" forKey:@"name"];? ? //修改
[dd setObject:@"222222" forKey:@"content"]; //增加
[dd removeObjectForKey:@"age"];? ? ? ? ? ? //刪除
//注意bool值的修改與一般值修改不一樣剔宪,是需要nsnumber作為中間轉(zhuǎn)換
//修改成功以后,將這個(gè)小字典重新添加到大字典里面
[dataDictionary setObject:dd forKey:@"一年級(jí)"];
[dataDictionary writeToFile:filePatch atomically:YES];
NSLog(@"---plist做過操作之后的字典里面內(nèi)容---%@",dataDictionary);
****** 清除plist文件 ******
//清除plist文件戈锻,可以根據(jù)我上面講的方式進(jìn)去本地查看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);
}