我有一个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