実際に NSDictionaries である辞書がある場合、NSCoding プロトコルを使用してそれらをドキュメント内のファイルにシリアル化することは、簡単、高速、かつ信頼性があります。アプリをアップグレードしても、Documents ディレクトリの内容は変更されません。
これは、私のアプリの 1 つで使用するコードです (ユーザーがお気に入りにした引用のリストを保存します)。
- (BOOL) saveQuotesToDisk
{
//get path to events list
NSArray * dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * fullpath = [NSString stringWithFormat:@"%@/%@", [dirPaths objectAtIndex:0], @"FavQuoteList.plist"];
//create data to be saved
NSMutableDictionary * rootObject = [NSMutableDictionary dictionary];
[rootObject setValue: _SavedQuotes forKey:@"_SavedQuotes"];
//write data
bool success = [NSKeyedArchiver archiveRootObject: rootObject
toFile: fullpath];
if (success) NSLog(@"Quotes list saved.");
else NSLog(@"ERROR on saving quotes list!");
return success;
}
- (BOOL) readFavoriteQuotesFromDisk
{
//get path to quote list
NSArray * dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * fullpath = [NSString stringWithFormat:@"%@/%@", [dirPaths objectAtIndex:0], @"FavQuoteList.plist"];
//read data
NSDictionary * rootObject = [NSKeyedUnarchiver unarchiveObjectWithFile: fullpath ];
_SavedQuotes = [[rootObject valueForKey:@"_SavedQuotes"] retain];
//check data
if (_SavedQuotes == nil) return NO;
else return YES;
}
rootObject
NSCoding プロトコルに準拠している限り、さらにオブジェクトを追加できます。