iOS開發 檔案路徑儲存

來源:互聯網
上載者:User

標籤:

OS檔案本地化處理要經過三個步驟,獲得檔案儲存路徑、根據檔案的屬性選擇對應的存檔方式,存檔讀檔的實現。

一、獲得檔案儲存路徑

1."應用程式套件組合": 這裡面存放的是應用程式的源檔案,包括資源檔和可執行檔。

NSString *path = [[NSBundle mainBundle] bundlePath];

2.Documents: 最常用的目錄,iTunes同步該應用時會同步此檔案夾中的內容,適合儲存重要資料。

NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;

3.Library/Caches: iTunes不會同步此檔案夾,適合儲存體積大,不需要備份的非重要資料。

NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;

4.tmp: iTunes不會同步此檔案夾,系統可能在應用沒運行時就刪除該目錄下的檔案,所以此目錄適合儲存應用中的一些臨時檔案,用完就刪除。

NSString *path = NSTemporaryDirectory();

5.Library/Preferences: iTunes同步該應用時會同步此檔案夾中的內容,通常儲存應用的設定資訊

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

二:不同的檔案屬性需要有不同的檔案儲存處理方式 

1.plist檔案一般儲存的檔案格式

NSArray;

NSMutableArray;

NSDictionary;

NSMutableDictionary;

NSData;

NSMutableData;

NSString;

NSMutableString;

NSNumber;

NSDate;

(1)擷取檔案儲存路徑

(2)儲存

[array writeToFile:fileName atomically:YES];

(3)讀取

NSArray *result = [NSArray arrayWithContentsOfFile:fileName];

( 4 )注意

只有以上列出的類型才能使用plist檔案儲存體。

儲存時使用writeToFile: atomically:方法。 其中atomically表示是否需要先寫入一個輔助檔案,再把輔助檔案拷貝到目標檔案地址。這是更安全的寫入檔案方法,一般都寫YES。

讀取時使用arrayWithContentsOfFile:方法。

2.Preference 設定檔

(1)獲得NSUserDefaults檔案

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

(2)向檔案中寫入內容

[userDefaults setObject:@"AAA"forKey:@"a"];

註:[userDefaults setObject:值 forKey:關鍵詞]

(3)同步到設定檔裡

[userDefaults synchronize];

(4)讀取檔案

NSString *name = [userDefaults objectForKey:@“a”]; //讀取設定檔中為“a”的值

BOOL sex = [userDefaults boolForKey:@"sex"];

註: 要使用對應的物件類型來讀取 設定檔中的值,且需要用對應的方法。

(5)注意

喜好設定是專門用來儲存應用程式的配置資訊的,一般不要在喜好設定中儲存其他資料。

如果沒有調用synchronize方法,系統會根據I/O情況不定時刻地儲存到檔案中。所以如果需要立即寫入檔案的就必須調用synchronize方法。

喜好設定會將所有資料儲存到同一個檔案中。即preference目錄下的一個以此應用程式套件名來命名的plist檔案。

3.NSKeyedArchiver 歸檔

歸檔在iOS中是另一種形式的序列化,只要遵循了NSCoding協議的對象都可以通過它實現序列化。由於決大多數支援儲存資料的Foundation和Cocoa Touch類都遵循了NSCoding協議,因此,對於大多數類來說,歸檔相對而言還是比較容易實現的。

(1)在需要歸檔的對象裡遵守NSCoding協議,並且使用對應的方法

在.h檔案裡面遵守 NSCoding 協議

@interface Person : NSObject

在.m檔案裡實現 NSCoding 協議的方法

//歸檔

- (void)encodeWithCoder:(NSCoder *)aCoder {

[aCoder encodeObject:self.avatar forKey:@"avatar"];

[aCoder encodeObject:self.nameforKey:@"name"];

[aCoder encodeInteger:self.age forKey:@"age"];

}

//解檔

- (id)initWithCoder:(NSCoder *)aDecoder {

if([superinit]) {

self.avatar = [aDecoder decodeObjectForKey:@"avatar"];

self.name= [aDecoder decodeObjectForKey:@"name"];

self.age = [aDecoder decodeIntegerForKey:@"age"];

}

returnself;

}

註: 要歸檔子類,必須在實現[super encodeObject:aCoder];[super initWithCoder:aDecoder];方法

(2)使用:

存檔使用NSKeyedArchiver中的archiveRootObject: toFile:方法

// 1.建立檔案路徑

NSString *file = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"person.data"];

// 2.存檔到檔案目錄下

[NSKeyedArchiver archiveRootObject:person toFile:file];

讀檔需要使用NSKeyedUnarchiver 中的  unarchiveObjectWithFile: 方法

// 1.建立檔案路徑

NSString *file = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"person.data"];

 

// 2.讀取檔案目錄下的檔案

Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:file];

(3)注意

必須遵循並實現NSCoding協議

儲存檔案的副檔名可以任意指定

繼承時必須先調用父類的歸檔解檔方法

 

iOS開發 檔案路徑儲存

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.