У меня есть ошибка, отправленная тестером, если он выполняет действие, а затем перезагружает свой телефон (нажав кнопку «Дом» и «Сон/Пробуждение» на несколько секунд), приложение не сохраняется.NSUserDefaults синхронизировать не сэкономить на
Я смог воспроизвести эту проблему. [NSUserDefaults synchronize] : вызов, но когда я перезапущу приложение после перезагрузки, значение внутри NSUserDefaults не было сохранено.
Кто-нибудь знает, синхронизируется ли хранилище с буфером, который позднее сохраняется на диск? Если да, то как я очистить буфер (я думал, что синхронизация была такой же, как флеш, но, видимо, нет.)
(редактировать) Другими словами:
assert([[NSUserDefaults standardUserDefaults] boolForKey: MY_KEY] == NO);
[[NSUserDefaults standardUserDefaults] setBool: YES forKey: MY_KEY];
[[NSUserDefaults standardUserDefaults] synchronize];
оставить приложение на переднем плане и перезагрузите устройство после вызова вышеуказанного, затем запустите резервное копирование устройства и запустите приложение. Утверждение должно стрелять во второй раз, но иногда это не так.
Чтобы быть очень специфичен ... Я создал одно приложение просмотра и поместите следующий код в viewDidLoad
#define MY_KEY @"MY_KEY"
- (void)viewDidLoad
{
[super viewDidLoad];
BOOL key = [[NSUserDefaults standardUserDefaults] boolForKey: MY_KEY];
NSLog(@"[[NSUserDefaults standardUserDefaults] boolForKey: MY_KEY] == %@", key ? @"YES" : @"NO");
[[NSUserDefaults standardUserDefaults] setBool: !key forKey: MY_KEY];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"reboot now.");
}
Вот выход из трех прогонов приложения:
2013-05-31 12:17:44.127 syncTest[162:907] [[NSUserDefaults standardUserDefaults] boolForKey: MY_KEY] == YES
2013-05-31 12:17:44.133 syncTest[162:907] reboot now.
2013-05-31 12:18:49.771 syncTest[128:907] [[NSUserDefaults standardUserDefaults] boolForKey: MY_KEY] == NO
2013-05-31 12:18:49.778 syncTest[128:907] reboot now.
2013-05-31 12:19:41.388 syncTest[124:907] [[NSUserDefaults standardUserDefaults] boolForKey: MY_KEY] == NO
2013-05-31 12:19:41.397 syncTest[124:907] reboot now.
Обратите внимание, что выход был «ДА, НЕТ, НЕТ», но он должен был быть «ДА, НЕТ, ДА»
Какое событие вы используете для вызова '[NSUserDefaults synchronize]' –
синхронизация должна работать, может помочь увидеть некоторый код. как вы устанавливаете и выбираете данные? – wattson12
Звучит странно, не должно случиться. Можете ли вы отправить код, в котором вы синхронизированы. – Shantanu