******? 數據持久化常用的五種方式? ******
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);
}