將各類類型的對象存儲到文件中,而不單單是字符串、數組和字典類型,有一種更靈活的方法。就是利用NSKeyedAarchiver類建立帶鍵(keyed)的檔案來完成。數組
Mac OS X從版本10.2開始支持帶鍵的檔案。在此以前,要使用NSArchiver類建立連續的(sequential)歸檔。連續的歸檔須要徹底按照寫入時的順序讀取歸檔中的數據。ide
在帶鍵的歸檔中,每一個歸檔字段都有一個名稱。歸檔某個對象時,會爲它提供一個名稱,即鍵。從歸檔中檢索該對象時,是根據這個鍵來檢索的。這樣能夠按照任意的順序將對象寫入歸檔並進行檢索。另外,若是向類添加了新的實例變量或刪除了實例變量,程序也能夠進行處理。spa
注意:iPhone SDK中沒有提供NSArchiver。若是想在iPhone上使用歸檔功能,則必須使用NSKeyedArchiver。.net
代碼示例以下:orm
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //---------------使用NSKeyedArchiver歸檔(存儲各類類型的對象數據)------------- //將字典數據寫到文件glossary.archive中 NSDictionary *glossary = [NSDictionary dictionaryWithObjectsAndKeys: @"A class defined so other class can inherit from it.",@"abstract class", @"To implement all the methods defined in a protocol.",@"adopt", @"Storing an object for later use.",@"archiving", nil ]; [NSKeyedArchiver archiveRootObject:glossary toFile:@"glossary.archive"]; //將文件glossary.archive中的數據讀到字典對象並顯示出來 NSDictionary *readglossary = [NSKeyedUnarchiver unarchiveObjectWithFile:@"glossary.archive"]; for(NSString *key in readglossary) NSLog(@"%@: %@",key,[readglossary objectForKey:key]); } return 0; }
其中,對象
[NSKeyedArchiver archiveRootObject:glossary toFile:@"glossary.archive"];
將字典glossary寫入到文件glossary.archive中。能夠爲該文件指定任何路徑名。在本例中,文件被寫入當前目錄下。blog
以後,又經過字符串
NSDictionary *readglossary = [NSKeyedUnarchiver unarchiveObjectWithFile:@"glossary.archive"];
方法將建立的歸檔文件讀入執行程序中。這個語句將指定的文件打開並讀取文件的內容,該文件必須是之前歸檔操做的結果。能夠爲文件指定完整路徑名或相對路徑名。get
在顯示結果以後,能夠簡單的經過枚舉其內容來驗證恢復是否成功。it