1. 程式人生 > >資料持久化—plist

資料持久化—plist


建立plist檔案有兩種方式:一種是工程目錄中建立,一種是程式碼建立在沙河中;


1.工程目錄建立: 這樣創建出來的plist 檔案 然後點選.plist檔案,出現一個Root行,點選Root這一行,然後通過點選右鍵->Add Row或者點選Root後面的加號來增加一行。這一行中包含三個屬性,key、type、value。其中key是欄位屬性,type是欄位型別,value是欄位對應的值。而Type又包含7中型別,其中兩種是Array和Dictionary,這兩種是陣列的形式,在它們下面還可以包含許多key-value。

而另外5種是Boolean,data,string,date,number。這5種類型的資料都是被array和dictionary所要包含的資料。

注意:此種建立方式不能通過程式碼來增加修改資料來源,因為它只有讀取許可權,沒有寫入許可權;


 1.   command + n;彈出以下的檔案選擇,往下滑動直到出現 Property List  這個檔案,點選選中,然後Next;


2.上一步Next後到這一步命名你要建立的Plist檔案;然後Create 建立;

                                                             

3.建立完成你就能在工程目錄左邊看到你所建立的Plist檔案;

        


4.  點選你建立的Plist檔案就能在工程的右側出現以下樣式:然後就可以往列表中新增你想要的資料;                          

    




2.程式碼建立:主要是把plist檔案建立在沙盒目錄中對一些部分檔案進行對應的讀寫限制,只能在幾個目錄下進行讀寫檔案:

(1)Documents:應用中使用者資料可以放在這裡,iTunes備份和恢復的時候會包括此目錄 (2)tmp:存放臨時檔案,iTunes不會備份和恢復此目錄,此目錄下檔案可能會在應用退出後刪除 (3)Library/Caches:存放快取檔案,iTunes不會備份此目錄,此目錄下檔案不會在應用退出刪除

在程式碼建立plist檔案中最關鍵的是 找到檔案的路徑;

NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);


常用的儲存位置:

    NSDocumentDirectory,                    // documents (Documents)

    NSCachesDirectory = 13,                 // location of discardable cache files (Library/Caches)


如果要指定其他檔案目錄,比如Caches目錄,需要更換目錄常量NSCachesDirectory。使用NSSearchPathForDirectoriesInDomains只能定位Caches目錄和Documents目錄。tmp目錄,不能按照上面的做法獲得目錄了,有個函式可以獲得應用的根目錄:

NSHomeDirectory()

也就是Documents的上級目錄,當然也是tmp目錄的上級目錄。那麼檔案路徑可以這樣寫:

NSString *fileName=[NSHomeDirectory() stringByAppendingPathComponent:@"tmp/wsqFile.txt"];


NSDocumentationDirectory 和  NSDocumentDirectory 的區別;

NSDocumentDirectory是指程式中對應的Documents路徑,而NSDocumentionDirectory對應於程式中的Library/Documentation路徑,這個路徑是沒有讀寫許可權的,所以看不到檔案生成。

  // 找到Documents 檔案所在的路徑

    NSArray *pathArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

  for (int  i = 0; i <pathArr.count ; i ++) {

        NSLog(@"路徑資料夾%d,%@",i,pathArr[i]);

    }

    //取得第一個Documents資料夾的路徑

    NSString *filePath = [pathArr objectAtIndex:0];

    NSLog(@"取得的路徑資料夾%@",filePath);

    //把TestPlist檔案加入

    NSString *plistPath = [filePath stringByAppendingPathComponent:@"wsqtest.plist"];



    //取得第一個Documents資料夾的路徑

    NSString *filePath = [pathArr objectAtIndex:0];

    NSLog(@"取得的路徑資料夾%@",filePath);


    //建立檔案管理

    NSFileManager *fm = [NSFileManager defaultManager];

    //開始建立檔案

    [fm createFileAtPath:plistPath contents:nil attributes:nil];

    //刪除檔案

    [fm removeItemAtPath:plistPath error:nil];

    

    //在寫入資料之前,需要把要寫入的資料先寫入一個字典中,建立一個dictionary(也可以是陣列的形式寫入Plist 就看需求):

    NSDictionary *dic = [NSDictionarydictionaryWithObjectsAndKeys:@"wsq",@"1",@"plist",@"2",nil];

    //把資料寫入plist檔案

    [dic writeToFile:plistPath atomically:YES];


    

    //讀取plist中的資料,形式如下:

    NSDictionary *dic2 = [NSDictionarydictionaryWithContentsOfFile:plistPath];

    NSLog(@"dic2:%@",dic2);