Синхронизация NSUserDefaults без сохранения на

У меня есть ошибка, представленная тестером, что если он выполняет действие, а затем перезагружает свой телефон (нажав несколько секунд кнопку «Домой» и «Режим сна / Пробуждение»), приложение не сохраняется.

Я был в состоянии воспроизвести эту проблему. [NSUserDefaults синхронизировать]является вызывается, но когда я перезагружаю приложение после перезагрузки, значение внутри 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.

Обратите внимание, что вывод былДА, НЕТ, НЕТ " но это должно было бытьДА, НЕТ, ДА "

Ответы на вопрос(2)

Ваш ответ на вопрос