Если у вас есть словари, которые на самом деле NSDictionaries, сериализации их использование Протокол NSCoding для файла внутри документов является простым, быстрым и надежным. Содержимое каталога Documents остается неизменным, если вы обновляете приложение.
Это код, который я использую в одном из моих приложений (он сохраняет список цитат, которые были Избраным пользователем)
- (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.
Удаляет ли NSUserDefaults при обновлении? –