我有一个NSMutableArray,里面有很多对象。一些是NSStrings,另一些是NSMutableArrays,其他是NSNumbers。存储此数据的最佳方法是什么,以便应用程序可以再次使用它?
阵列也需要保持秩序。
我在想一个plist或NSUserDefaults?
非常感谢
答案 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];