我有一個NSMutableArray中有許多對象。一些是NSStrings,其他的是NSMutableArrays,其他的是NSNumbers。存儲這些數據的最佳方式是什麼,以便應用程序可以再次使用它?用可可存儲對象數組的最佳方式是什麼?
該陣列還需要保持順序。
我在想plist或NSUserDefaults?
非常感謝
我有一個NSMutableArray中有許多對象。一些是NSStrings,其他的是NSMutableArrays,其他的是NSNumbers。存儲這些數據的最佳方式是什麼,以便應用程序可以再次使用它?用可可存儲對象數組的最佳方式是什麼?
該陣列還需要保持順序。
我在想plist或NSUserDefaults?
非常感謝
考慮使用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];
它很好用,特別是在數組包含更多字符串和數字的情況下。
通過這種方式,您可以確保未歸檔的數組與原始數據完全相同。
假設其它陣列也只包含數字,字符串和數組(或其他財產清單類型),一個的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];
只有在使用NSUserDefaults或寫出PLIST時,「僅包含數字字符串和數組」(以及日期和字典以及NSData和NSNull)部分以及「創建不可變數組」部分纔是真實的。 PLIST(和用戶默認,相同的格式)只允許這些類型,但如果你的類可以存檔/取消存檔,它可以存儲爲PLIST /用戶默認情況下的NSData實例。如果按照Anne的建議,使用密鑰存檔,則不妨將這些信息存儲在自己的文件中。不過,用戶默認/ plist將適用於您所描述的情況。 – 2013-02-07 01:35:37