He estado experimentando resultados muy inconsistentes mientras desarrollaba una aplicación de iPhone y trato de guardar las preferencias a través del mecanismo NSUserDefaults estándar. Estoy utilizando el código casi directamente de libro de cocina del iPhone desarrollador por Erica Sadun (libro fantástico por cierto), que se ve así:comportamiento de los valores predeterminados inconsistentes (NSUserDefaults) en los valores predeterminados del simulador de iPhone
(void) updateDefaults { NSMutableArray *spells = [[NSMutableArray alloc] init]; NSMutableArray *locs = [[NSMutableArray alloc] init]; for (DragView *dv in [boardView subviews]) { [spells addObject:[dv whichSpell]]; [locs addObject:NSStringFromCGRect([dv frame])]; } [[NSUserDefaults standardUserDefaults] setObject:spells forKey:@"spells"]; [[NSUserDefaults standardUserDefaults] setObject:locs forKey:@"locs"]; [[NSUserDefaults standardUserDefaults] synchronize]; [spells release]; [locs release]; }
Los valores se guardan, a veces ... y restaurados, a veces. No puedo obtener una cuenta exacta sobre lo que hace o no funciona.
¿Alguien más tiene alguna experiencia similar? ¿Alguna sugerencia sobre qué podría hacer que funcione? El método de sincronización es la mejor manera de forzar la escritura de un disco y hacer que los valores se guarden, o hay algo mejor (tanto para la producción como para el simulador).
Gracias Ryan
Ok, gracias. Estoy ligeramente confundido en cuanto a por qué tengo que usar un NSKeyedArchiver para almacenar una matriz ... ¿el setObject estándar no funcionará de manera precisa o suficiente por alguna razón? No me había encontrado con NSKeyedArchiver antes, así que no estoy familiarizado con más que el párrafo de introducción de los documentos. –
Creo que debe usarlo para asegurarse de que sus clases personalizadas compatibles con NSCoding estén archivadas correctamente. Creo que setObject solo funciona con matrices de objetos compatibles. Sin embargo, podría estar equivocado. –