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

Cocoa touch 使用cocoa存储对象数组的最佳方式是什么?,cocoa-touch,xcode,cocoa,nsmutablearray,Cocoa Touch,Xcode,Cocoa,Nsmutablearray,我有一个NSMutableArray,里面有很多对象。有些是NSString,有些是NSMutableArray,有些是NSNumber。存储这些数据以便应用程序再次使用的最佳方式是什么 阵列也需要保持有序 我在想一个plist还是nsuser 非常感谢假设其他数组也只包含数字、字符串和数组(或其他属性列表类型),plist将是存储数据的好方法。它将保持它的秩序,而且使用简单 要将数组写入plist文件,请使用writeToFile:atomically: [myArray writeToFil

我有一个NSMutableArray,里面有很多对象。有些是NSString,有些是NSMutableArray,有些是NSNumber。存储这些数据以便应用程序再次使用的最佳方式是什么

阵列也需要保持有序

我在想一个plist还是nsuser


非常感谢

假设其他数组也只包含数字、字符串和数组(或其他属性列表类型),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];

考虑使用
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];
它非常有效,尤其是当数组包含的字符串和数字多于字符串和数字时。
通过这种方式,您可以确保未归档的数组与原始数组相同。

只有在使用NSUserDefaults或向PLIST写入时,“仅包含数字字符串和数组”(以及日期、字典、NSData和NSNull)部分以及“创建不可变数组”部分才为真。PLIST(和用户默认值,相同格式)只允许这些类型,但如果您的类可以存档/未存档,则可以将其作为NSData实例存储在PLIST/user defaults中。如果您像上面Anne建议的那样使用键控归档,那么您最好将这些信息存储在它自己的文件中。不过,用户默认值/plist将适用于您描述的情况。