ios 簡單的plist文件讀寫操作(Document和NSUserDefaults)


最近遇到ios上文件讀寫操作的有關知識,記錄下來,以便以后查閱,同時分享與大家。

 

一,簡單介紹一下常用的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文件讀取。

 

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

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

 

 

 

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

 

[cpp]  view plain  copy
 
  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快速讀寫,利用系統提供的方法,我們可以快速保存簡單數據類型,如用戶登錄用戶名密碼。

 

[cpp]  view plain  copy
 
  1. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];//獲取標准函數對象  
  2. NSMutableDictionary *defaultcoordinate = [defaults objectForKey:@"default_coordinate"];//通過對象獲取名稱下NSMutableDictionary數據  
  3. NSString *currentCity = [defaultcoordinate objectForKey:@"c_name"];  

      3-2,增刪改,一看便會。

 

 

[cpp]  view plain  copy
 
  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同步操作,否則偶然會因為別的線程占大量內存而沒有保存成功

[cpp]  view plain  copy
 
  1. [defaults synchronize];  

 

 

 

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

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

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

 

 

 

有關文件操作,先寫到這里,更復雜的NSData或sqlite保存,以后用到,學到時再補充吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM