ios開發----應用資料存放區的常用方法之plist存取方法,iosplist

來源:互聯網
上載者:User

ios開發----應用資料存放區的常用方法之plist存取方法,iosplist

  [注意]轉載時請註明出處部落格園-吃唐僧肉的小悟空http://www.cnblogs.com/hukezhu/

 

  ios應用資料存放區的常用方式主要有:

  • XML屬性列表(plist)歸檔
  • Preference(喜好設定)
  • NSKeyedArchiver歸檔(NSCoding)
  • SQLite3
  • Core Data
  ios應用沙箱機制

  介紹這些方法之前,首先介紹一下應用沙箱的概念.

  ios應用沙箱機制就是指ios應用程式只能在為該程式建立的檔案系統中讀取檔案,不可以去其它地方訪問,此地區被成為沙箱,所以所有的非代碼檔案都要儲存在此,例像,表徵圖,聲音,映像,屬性列表,文字檔等。(ios8之前是這個樣子,iOS8新開放了一種對幾個固定系統地區的擴充機制extension,它可以在一定程度上彌補iOS的沙箱機制對應用間通訊的限制).

  應用沙箱機制下,每個應用程式都有自己的儲存空間 ;應用程式不能翻過自己的圍牆去訪問別的儲存空間的內容 ;應用程式請求的資料都要通過許可權檢測,假如不合格話,不會被允許存取。

  應用沙箱的結構主要如下:

 

  Documents:儲存應用運行時產生的需要持久化的資料,iTunes同步裝置時會備份該目錄。例如,遊戲應用可將遊戲存檔儲存在該目錄

  

  tmp:儲存應用運行時所需的臨時資料,使用完畢後再將相應的檔案從該目錄刪除。應用沒有運行時,系統也可能會清除該目錄下的檔案。iTunes同步裝置時不會備份該目錄   Library/Caches:儲存應用運行時產生的需要持久化的資料,iTunes同步裝置時不會備份該目錄。一般儲存體積大、不需要備份的非重要資料   Library/Preference:儲存應用的所有喜好設定,iOS的Settings(設定)應用會在該目錄中尋找應用的設定資訊。iTunes同步裝置時會備份該目錄    ios應用沙箱目錄常見擷取方式  在介紹plist檔案存取方式之前,還有一個問題需要提前介紹,一會也需要用到,就是我們怎麼擷取用於沙箱的目錄,也有多種方式,   擷取應用沙箱根目錄的方法:   
//擷取應用沙箱的根目錄NSString *home = NSHomeDirectory();//NSHomeDirectory()是一個c語言的方法

 

  擷取Documents檔案路徑的方法:

    • 第一種方法:
      • 首先,擷取應用沙箱的根目錄,再利用字串的拼接函數,得到Documents目錄 (但是不建議採用這個方法,因為新版本的作業系統可能會修改目錄名)
1     //第一種方法:2     //擷取當前應用沙箱的根目錄3     NSString *homePath = NSHomeDirectory();4     //拼接路徑5     NSString *docPath = [homePath stringByAppendingPathComponent:@"Documents"];  
    • 第二種方法
      • 利用NSSearchPathForDirectoriesInDomains函數獲得Documents目錄
 //第二種方法    NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

    這個NSSearchPathForDirectoriesInDomains函數一共有三個參數(注意返回的是一個數組),第一個參數是代表擷取什麼檔案的路徑(枚舉選擇就可),系統已經幫我們封裝好.第二個參數代表從使用者檔案夾下找,第三個參數代表尋找時檔案是否展開,這個參數一般就填為yes,否則的話可能找不到路徑,通過no,擷取的路徑,系統會將前面的路徑換為一個~,如:

    

 

  正常情況下,為YES的情況輸出如:

  

 

  所以此處注意:這個NSSearchPathForDirectoriesInDomains函數的第三個參數一般都要寫為YES.注意這個函數返回的是一個數組,但是在ios系統中的沙箱只有這樣的一個檔案夾,所以取數組的第0個元素即可.

    在mac系統中,有一個能自動找到應用沙箱的根目錄的軟體simpholder2.app,在測試使用是非常方便,可以下載使用.(需要的話請聯絡595632239@163.com)

 

 

  擷取應用沙箱tmp目錄的方法:

  

//擷取應用沙箱tmp目錄NSString *tmp = NSTemporaryDirectory();
 

  

  

   擷取應用沙箱caches目錄的方法:

1 //擷取應用沙箱tmp目錄2 3 NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];4 5 6 //當然也可以使用最開始上面介紹的字串拼接方法獲得,此處不再贅述

 

 

   擷取應用沙箱preference目錄的方法:

     通過NSUserDefaults類存取該目錄下的設定資訊

 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

 

 

 

plist檔案存取方式

  屬性列表是一種XML格式的檔案,拓展名為plist

  如果對象是NSString、NSDictionary、NSArray、NSData、NSNumber等類型,就可以使用writeToFile:atomically:方法直接將對象寫到屬性列表檔案中   我通過一個小的demo來測試這個plist檔案 的存取過程.  在storyboard中拖入兩個按鈕,分別拖線,執行儲存和讀取的方法:     儲存操作:  
 1 - (IBAction)save { 2      3     //擷取應用沙箱的根目錄有兩種方法 4 //    //第一種方法: 5 //    //擷取當前應用沙箱的根目錄 6 //    NSString *homePath = NSHomeDirectory(); 7 //    //拼接路徑 8 //    NSString *docPath = [homePath stringByAppendingPathComponent:@"Documents"]; 9 //10 //    //還要指定隱藏檔的檔案名稱,仍然使用字串拼接11 //    NSString *filePath = [docPath stringByAppendingPathComponent:@"test.plist"];12 //    //NSLog(@"%@",filePath);13     14     //第二種方法15     NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];16         //還要指定隱藏檔的檔案名稱,仍然使用字串拼接17     NSString *filePath = [docPath stringByAppendingPathComponent:@"test.plist"];18     NSLog(@"%@",filePath);19     //建立一個數組(作為例子)20     NSArray *array = @[@"abc",@123,@"a-d-g"];21     22     //將數組儲存到檔案中23     [array writeToFile:filePath atomically:YES];24     25 26     27     28 }

 

 

  讀取操作:

  

 1 - (IBAction)read { 2      3     //擷取Documents目錄 4     NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; 5     //還要指定隱藏檔的檔案名稱,仍然使用字串拼接 6     NSString *filePath = [docPath stringByAppendingPathComponent:@"test.plist"]; 7      8      9     //使用一個數組來接受資料10     NSArray *array = [NSArray arrayWithContentsOfFile:filePath];11     NSLog(@"%@",array);12     13 }

 

  我這裡是使用NSArray來進行測試存取的,也可以使用字典.但是有一點需要注意,就是存取字串的時候,最好不要使用plist檔案,因為plist本身不支援字串(這個可以通過建立一個plist檔案,開啟之後,發現其根節點處,只有數組和字典兩個選項),而且字串的存取方法也已經到期.

 

  此處再順便 介紹一下上面提到的能自動找到應用沙箱的根目錄的軟體simpholder2.app軟體,安裝開啟之後,

 

點擊之後就會自動開啟當前應用的沙箱,非常方便測試使用.

 

  

 

  最後附上程式的原始碼:

ViewController:

  

1 // 2 // ViewController.m 3 // 02-plist檔案存取 4 // 5 // Created by hukezhu on 15/6/5. 6 // Copyright (c) 2015年 hukezhu. All rights reserved. 7 // 8 9 #import "ViewController.h"10 11 @interface ViewController ()12 - (IBAction)save;13 14 - (IBAction)read;15 @end16 17 @implementation ViewController18 19 - (void)viewDidLoad {20 [super viewDidLoad];21 // Do any additional setup after loading the view, typically from a nib.22 }23 24 - (void)didReceiveMemoryWarning {25 [super didReceiveMemoryWarning];26 // Dispose of any resources that can be recreated.27 }28 29 //擷取應用沙箱的根目錄有兩種方法30 //第一種方法:31 32 33 34 - (IBAction)save {35 36 //擷取應用沙箱的根目錄有兩種方法37 // //第一種方法:38 // //擷取當前應用沙箱的根目錄39 // NSString *homePath = NSHomeDirectory();40 // //拼接路徑41 // NSString *docPath = [homePath stringByAppendingPathComponent:@"Documents"];42 //43 // //還要指定隱藏檔的檔案名稱,仍然使用字串拼接44 // NSString *filePath = [docPath stringByAppendingPathComponent:@"test.plist"];45 // //NSLog(@"%@",filePath);46 47 //第二種方法48 NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];49 //還要指定隱藏檔的檔案名稱,仍然使用字串拼接50 NSString *filePath = [docPath stringByAppendingPathComponent:@"test.plist"];51 NSLog(@"%@",filePath);52 //建立一個數組(作為例子)53 NSArray *array = @[@"abc",@123,@"a-d-g"];54 55 //將數組儲存到檔案中56 [array writeToFile:filePath atomically:YES];57 58 59 60 61 }62 63 - (IBAction)read {64 65 //擷取Documents目錄66 NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];67 //還要指定隱藏檔的檔案名稱,仍然使用字串拼接68 NSString *filePath = [docPath stringByAppendingPathComponent:@"test.plist"];69 70 71 //使用一個數組來接受資料72 NSArray *array = [NSArray arrayWithContentsOfFile:filePath];73 NSLog(@"%@",array);74 75 }76 @endVIewController

  

  本篇文章只是說了一個plist檔案的存取,剩下的檔案存取方式,之後再介紹.  

 

 

 

 

  根據學習,整機整理相關知識點,如有錯誤不當之處,請批評指正,謝謝.

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.