NSUserDefaults sincroniza no guardando en

Tengo un error enviado por un probador que, si realiza una acción y luego reinicia su teléfono (presionando el botón de inicio y el botón de Suspender / Activar durante unos segundos), la aplicación no se mantiene en estado.

He podido reproducir este problema. [NSUserDefaults sincroniza]es se me llama, pero cuando reinicio la aplicación después del reinicio, no se guardó el valor dentro de NSUserDefaults.

¿Alguien sabe si la sincronización se almacena en un búfer que luego se guarda en el disco? Si es así, ¿cómo descargo el búfer (pensé que sincronizar era lo mismo que un vaciado, pero al parecer no)?

(editar) En otras palabras:

assert([[NSUserDefaults standardUserDefaults] boolForKey: MY_KEY] == NO);
[[NSUserDefaults standardUserDefaults] setBool: YES forKey: MY_KEY];
[[NSUserDefaults standardUserDefaults] synchronize];

deje la aplicación en primer plano y reinicie el dispositivo después de llamar a la anterior, luego vuelva a iniciar el dispositivo y vuelva a ejecutar la aplicación. La afirmación debería dispararse la segunda vez, pero a veces no lo hace.

Para ser muy específicos ... creé una aplicación de vista única y puse el siguiente código en 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.");
}

Aquí está la salida de tres ejecuciones de la aplicación:

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.

Tenga en cuenta que la salida fue "SÍ, NO, NO", pero debería haber sido "SÍ, NO, SÍ"

Respuestas a la pregunta(2)

Su respuesta a la pregunta