リストを保存するために 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];
}
これら 2 つの関数を実装すると、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];
}
}
}