NSDocument、NSUserDefaults、plist

一,簡單介紹一下常用的plist文件。

全名是:Property List,屬性列表文件,它是一種用來存儲串行化後的對象的文件。屬性列表文件的擴展名爲.plist ,因此通常被稱爲 plist文件。文件是xml格式的。
Plist文件通常用於儲存用戶設置,也可以用於存儲捆綁的信息




二,先說文件保存到的幾個位置:

1,工程沙盒裏(就是程序user Document文件夾下,以讀取文件,寫入文件方式)

2,工程自身裏(就是在工程裏手動創建一個如.plist文件,把固定的內容寫入,這個需要人工手動寫入)

3,工程沙盒裏(保存到user Document下,不過不需要讀寫文件,用系統的 NSUserDefaults 可以快速保存添加讀取刪除基本數據類型,類似於android裏的Sharedpreferences 


先看截圖吧



控制檯輸出的爲工程下plist文件和沙盒文件的路徑,前綴都是統一的,只是到了程序的文件夾後,一個是appName.app,另一個是Documents下。所以存放位置還是不一樣的。

首先說一下,工程下的.plist是我們不能在代碼中寫入的,可以讀取,但是不可以寫入(目前我是這樣的結論,猜測應該是apple爲了安全限制的),所以,代碼中進行文件寫等操作只能在沙盒路徑下的文件中操作。

(程序常用固定數據,比如離線地圖數據,各城市經緯度信息等需要我們綁定到程序裏(比UserDocument安全),那麼,可以代碼循環寫入,把.plist寫在沙盒內,然後手動copy到工程目錄下,這樣就不用我們手動添加啦)


三,三種方式的讀寫操作。


1-1,創建plist文件。

按command +N快捷鍵創建,或者File —> New —> New File,選擇Resource 下的Property List

1-2,工程路徑plist文件讀取。


    //path 讀取當前程序定義好的provinces.plist省份城市文件  
     NSString *path = [[NSBundle mainBundle] pathForResource:@"provinces" ofType:@"plist"];  
      
     NSDictionary *data = [NSDictionary dictionaryWithContentsOfFile:path];  
     self.provincesContent = [NSArray arrayWithArray:[data objectForKey:@"province"]];//array數組的名稱就叫province  

1-3,讀取後賦值給我們相應的數據類型,就可以直接使用了,就是這麼簡單。



2-1,沙盒路徑plist文件的讀取。


  1. NSArray *patharray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  2.   
  3. NSString *path =  [patharray objectAtIndex:0];  
  4.   
  5. NSString *filepath=[path stringByAppendingPathComponent:@"provinces.plist"];//添加我們需要的文件全稱  
  6.   
  7. //獲取此路徑下的我們需要的數據(NSArray,NSDictionary,NSString...)  
  8. NSMutableArray *rootArray = [NSMutableArray arrayWithContentsOfFile:filepath];//注意,如果想添加新的數據,需要NSMutable類型的  
2-2,如果document裏沒有此文件,會自動創建,讀取賦值後,便可使用,同時可以add,update,和remove,具體看上面的截圖,一目瞭然。


3-1,NSUserDefaults快速讀寫,利用系統提供的方法,我們可以快速保存簡單數據類型,如用戶登錄用戶名密碼。


  1. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];//獲取標準函數對象  
  2. NSMutableDictionary *defaultcoordinate = [defaults objectForKey:@"default_coordinate"];//通過對象獲取名稱下NSMutableDictionary數據  
  3. NSString *currentCity = [defaultcoordinate objectForKey:@"c_name"];  
      3-2,增刪改,一看便會。


  1. [defaults setObject:@"kaka" forKey:@"newdata"];//添加id對象類型數據  
  2. [defaults objectForKey:@"newdata"];//獲取對象類型數據  
  3.   
  4. [defaults setDouble:2013 forKey:@"double"];//添加double類型數據  
  5. [defaults doubleForKey:@"double"];//獲取double類型數據  
  6.   
  7. [defaults setBool:NO forKey:@"BOOL"];//添加BOOL類型數據  
  8. [defaults boolForKey:@"BOOL"];//獲取BOOL類型數據  
  9.   
  10. [defaults setInteger:12 forKey:@"int"];//添加int類型數據  
  11. [defaults integerForKey:@"int"];//獲取int類型數據  
  12.   
  13. [defaults setFloat:0.23 forKey:@"float"];//添加Float類型數據  
  14. [defaults floatForKey:@"float"];//獲取float類型數據  
  15.   
  16. [defaults removeObjectForKey:@"newdata"];//刪除對象數據  

3-3,操作之後記得Synchronize同步操作,否則偶然會因爲別的線程佔大量內存而沒有保存成功

  1. [defaults synchronize];  


四,沙盒文件打開的方法:

1,可以通過 系統帶的 終端工具,在bash命令行模式定位到

2,Finder菜單-前往 此時按住鍵盤的:option按鍵,就會顯示出:資源庫,點擊進入

發佈了42 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章