Вы должны использовать NSKeyedArchiver для сохранения ваших массивов, например:
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:spells] forKey:@"spells"];
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:locs] forKey:@"locs"];
[[NSUserDefaults standardUserDefaults] synchronize];
Вы также должны убедиться, что ваш класс заклинаний реализует протокол NSCoding (encodeWithCoder: и initWithCoder :), если это пользовательский класс. Похоже, ваши locs - это NSStrings, которые будут прекрасно архивироваться.
Вам также нужно будет сделать что-то вроде
NSData *dataRepresentingSavedSpells = [currentDefaults objectForKey:@"spells"];
if (dataRepresentingSavedSpells != nil)
{
NSArray *oldSpells = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedSpells];
}
Для загрузки старых значений по умолчанию.
Я использую синхронизацию для записи на диск при выходе, и это было очень надежно в моем опыте.