2011-05-31 73 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

相关问题