數據持久化的步驟
// 1.指定前往哪個文件夾
// 2,用字符串接收路徑
// 3.拼接文件夾路徑
// 4.寫入本地或者歸檔操作
// 注 :如果是複雜對象歸檔 ,要簽訂NSCoding方法 .並且實現兩個協議方法,放在數組裏的複雜對象歸檔也要籤協議
蘋果手機爲了保證自己數據上的絕對的安全設計了沙盒文件 ,每一個應用程序都配備了自己的沙盒文件 ,每一次運行 ,文件夾的名字就會變成一個沒有任何規律的字符串
第一個參數 當前要去哪個文件夾 ,前往documents文件用 NSDocumentDirectory ,64行那個 , 還可以前往caches文件夾 ,對應 68 行
第二個參數 訪問文件夾類型 ,指定訪問時用戶文件夾
第三個參數 絕對路徑(YES) ,相對路徑(NO)
(1)絕對路徑是給系統使用的 ,系統可以根據當前路徑找到文件夾 , 我們在操作文件的時候使用絕對路徑
(2)相對路徑只會把要前往的文件夾顯示出來 ,其他部分都是~ ,告訴程序員要去哪個文件夾
NSArray *sandbox =NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
沙盒裏一共有三個文件
1.是Documents文件 : 主要是用來儲存用戶的想要儲存的一些信息 ,比如收藏的信息或者自己設置的一些內容 ,所以我們做收藏功能就是前往這個文件夾裏寫文件
2.Library文件夾是方便程序員開發使用的.主要操作它裏面的兩個文件夾 ,caches和 preferences
(1).caches :用來保存緩存文件 ,SDWebImage會把圖片加到緩存文件中 ,所以清除緩存功能就是把這個文件夾刪除
(2).preferences 一般來保存程序員設置的信息,比如NSUserFaults就會把數據保存在這個文件夾裏
3.tmp文件:一般存放臨時內容
之前在沙盒裏還有一個.app文件 ,在新的版本里已經被移走了
把簡單的對象寫入本地, 簡單的對象指的是NSString ,NSArray等
1.先通過數組獲取沙盒路徑
NSArray *sandBox =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
2.從數組裏獲取沙盒路徑
NSString *sandBoxPath =sandBox[0];
3.要給寫入的文件拼接一個路徑 ,拼接方式有兩種
NSString *documentPath =[sandBoxPath stringByAppendingPathComponent:@"顧宇.xml"];
把字符串寫入到本地
NSString *str= @”隔壁老顧”;
第一個參數 :文件要保存的路徑
第二個參數 :對文件進行保護 ,YES
第三個參數 :編碼
四 ,錯誤信息
[str writeToFile:documentPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
如果路徑下有對應的文件 ,則會把原來文件覆蓋 ,如果沒有則創建一個新的文件
把沙盒文件再讀出來
NSString *tempStr =[NSString stringWithContentsOfFile:documentPath encoding:NSUTF8StringEncoding error:nil];
把數組寫入到本地
NSArray *arr =@[@”1” ,@”2”, @”3” ,@”4” ,@”5” ,@”6”];
1.通過數組獲取沙盒地址
NSArray *sandBox =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
2.用字符串保存沙盒路徑
NSString *sandBoxPath =sandBox[0];
3.給要寫入得文件拼接路徑
NSString *documentPath =[sandBoxPath stringByAppendingPathComponent:@"gu.plist"];
4.把數組寫入到本地
[arr writeToFile:documentPath atomically:YES];
5.把數組再讀出來
NSArray *temp =[NSArray arrayWithContentsOfFile:documentPath];
把簡單的字典寫入到本地
NSDictionary *dic =[NSDictionary dictionaryWithObjectsAndKeys:@"1",@"2",@"3",@"4",@"5",@"6", nil];
NSArray *sandBox =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *sangBoxPath =sandBox[0];
NSString *documentPath =[sangBoxPath stringByAppendingPathComponent:@"111.plist"];
NSLog(@"%@",documentPath);
[dic writeToFile:documentPath atomically:YES];
NSMutableDictionary *temp =[NSMutableDictionary dictionaryWithContentsOfFile:documentPath];
NSLog(@"%@",temp);