2011-05-31 62 views
4

我有一個NSMutableArray中有許多對象。一些是NSStrings,其他的是NSMutableArrays,其他的是NSNumbers。存儲這些數據的最佳方式是什麼,以便應用程序可以再次使用它?用可可存儲對象數組的最佳方式是什麼?

該陣列還需要保持順序。

我在想plist或NSUserDefaults?

非常感謝

回答

3

考慮使用NSKeyedArchiver

// Archive 
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:theArray]; 
NSString *path = @"/Users/Anne/Desktop/archive.dat"; 
[data writeToFile:path options:NSDataWritingAtomic error:nil]; 

// Unarchive 
NSString *path = @"/Users/Anne/Desktop/archive.dat"; 
NSMutableArray *theArray = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; 

它很好用,特別是在數組包含更多字符串和數字的情況下。
通過這種方式,您可以確保未歸檔的數組與原始數據完全相同。

2

假設其它陣列也只包含數字,字符串和數組(或其他財產清單類型),一個的plist是存儲數據的好方法。它將保持它的秩序,並且使用簡單。

要將數組寫入plist文件,請使用writeToFile:atomically:。可以使用initWithContentsOfFile:

myArray = [[NSMutableArray alloc] initWithContentsOfFile:@"path/to/file.plist"]; 

但是,這將創建一個具有非可變內容的可變數組。要創建一個可變內容的數組,可以使用CFPropertyListCreateDeepCopy

NSArray *temp = [[NSArray alloc] initWithContentsOfFile:@"path/to/file.plist"]; 
myArray = (NSMutableArray*) CFPropertyListCreateDeepCopy(kCFAllocatorDefault,(CFArrayRef)temp,kCFPropertyListMutableContainers); 
[temp release]; 
+0

只有在使用NSUserDefaults或寫出PLIST時,「僅包含數字字符串和數組」(以及日期和字典以及NSData和NSNull)部分以及「創建不可變數組」部分纔是真實的。 PLIST(和用戶默認,相同的格式)只允許這些類型,但如果你的類可以存檔/取消存檔,它可以存儲爲PLIST /用戶默認情況下的NSData實例。如果按照Anne的建議,使用密鑰存檔,則不妨將這些信息存儲在自己的文件中。不過,用戶默認/ plist將適用於您所描述的情況。 – 2013-02-07 01:35:37

相關問題