我一直在使用 NSKeyedArchivers 来存储列表。
http://developer.apple.com/library/ios/#documentation/cocoa/reference/foundation/Classes/NSKeyedArchiver_Class/Reference/Reference.html
非常易于管理,它可以轻松存储、保存和检索您的所有数据。
示例是对象列表 (NSMutableArray)。每个对象都实现了 NSCoding 并具有 initWithCoder: 和 encodeWithCoder: 函数。
例如(假设对象具有名称和日期属性)
- (id) initWithCoder:(NSCoder *){
self = [super init];
if (self){
[self setName:[aDecoder decodeObjectForKey:@"name"]];
[self setDate:[aDecoder decodeObjectForKey:@"date"]];
}
return self;
}
- (void) encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:name forKey:@"name"];
[aCoder encodeObject:date forKey:@"date"];
}
然后你可以简单地让你的 NSMutableArray 添加这些对象,由具有以下功能的东西管理,然后调用 saveChanges :
- (NSString *) itemArchivePath{
NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [documentDirectories objectAtIndex:0];
return [documentDirectory stringByAppendingPathComponent:@"myArchiveName.archive"];
}
- (BOOL) saveChanges{
NSString *path = [self itemArchivePath];
return [NSKeyedArchiver archiveRootObject:myList toFile:path];
}
实现这两个函数后,您只需调用 saveChanges。
并在下次启动后稍后检索列表,在您的经理的 init 中:
- (id) init{
self = [super init];
if (self){
NSString *path = [self itemArchivePath];
myList = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
// If the array hadn't been saved previously, create a new empty one
if (!myList){
myList = [[NSMutableArray Alloc] init];
}
}
}