數據持久化 (沙盒, 數據儲存)

數據持久化的步驟

// 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);
發佈了73 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章