使用cocoa存储对象数组的最佳方法是什么?

时间:2011-05-31 19:52:28

标签: cocoa-touch xcode cocoa nsmutablearray

我有一个NSMutableArray,里面有很多对象。一些是NSStrings,另一些是NSMutableArrays,其他是NSNumbers。存储此数据的最佳方法是什么,以便应用程序可以再次使用它?

阵列也需要保持秩序。

我在想一个plist或NSUserDefaults?

非常感谢

2 个答案:

答案 0 :(得分: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];

效果很好,尤其是在数组包含多个字符串和数字的情况下 这样,您可以确保未归档的数组与原始数组相同。

答案 1 :(得分:2)

假设其他数组也只包含数字,字符串和数组(或其他属性列表类型),plist将是存储数据的好方法。它将保持秩序,并且易于使用。

要将数组写入plist文件,请使用writeToFile:atomically:

[myArray writeToFile:@"path/to/file.plist" atomically:YES];

要阅读它,请使用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];