Pregunta

Hola chicos, tengo problemas con NSUserDefaults y no entiendo muy bien qué está pasando

Mi aplicación tiene 5 niveles y cada nivel hace exactamente lo mismo con NSUserDefaults (recupera los valores predeterminados de los niveles, cambia el valor a medida que el usuario juega el nivel y luego establece los valores predeterminados y sincroniza al final del nivel) los primeros 4 niveles ... funcionan sin problemas, pero el último nivel no guarda los valores. La aplicación no se bloquea y el último nivel no es lo último que sucede, e incluso tengo los valores predeterminados sincronizados cuando la aplicación finaliza. ¿Hay un tamaño máximo en NSUserDefaults o hay algo que alguien pueda pensar que yo no tengo? Publicaré el código a continuación, pero como dije, los primeros cuatro niveles funcionan perfectamente

//header
NSUserDefaults *userData;


@property(nonatomic,retain) NSUserDefaults *userData;


//class file
//Sets the boolean variables for the class to use
userData = [NSUserDefaults standardUserDefaults];
boolOne = [userData boolForKey:@"LevelFiveBoolOne"];
boolTwo = [userData boolForKey:@"LevelFiveBoolTwo"];
boolThree = [userData boolForKey:@"LevelFiveBoolThree"];
boolFour = [userData boolForKey:@"LevelFiveBoolFour"];
boolFive = [userData boolForKey:@"LevelFiveBoolFive"];
boolSix = [userData boolForKey:@"LevelFiveBoolSix"];
boolSeven = [userData boolForKey:@"LevelFiveBoolSeven"];

//End Of Level
[userData setBool:boolOne forKey:@"LevelFiveBoolOne"];
[userData setBool:boolTwo forKey:@"LevelFiveBoolTwo"];
[userData setBool:boolThree forKey:@"LevelFiveBoolThree"];
[userData setBool:boolFour forKey:@"LevelFiveBoolFour"];
[userData setBool:boolFive forKey:@"LevelFiveBoolFive"];
[userData setBool:boolSix forKey:@"LevelFiveBoolSix"];
[userData setBool:boolSeven forKey:@"LevelFiveBoolSeven"];
[userData synchronize];

Cuando cuando cambio a la vista que usa estos valores predeterminados, los valores son correctos, pero cuando finalizo la aplicación y la reinicio, estos valores no se guardan, todos los demás niveles realizan exactamente el mismo proceso, este es el único nivel que no no funciona.

He observado esto durante bastante tiempo y espero que alguien por ahí haya tenido el mismo problema y pueda darme una idea de cómo lo resolvieron.

Gracias de antemano BWC

¿Fue útil?

Solución

NSUserDefaults podría no tener la oportunidad de guardar dependiendo de cómo se termina el proceso.

Esta respuesta tiene más información: ¿Por qué NSUserDefaults no guarda mis valores? ?

Otros consejos

En caso de que alguien se encuentre con esto: al almacenar un NSDictionary o NSArray (o mutable Objetos de ambos) en el usuario predeterminados y tienen un objeto NSURL almacenado, ¡no guardará los datos en sincronizar!

En algún lugar tienes algo como:

// load the default values for the user defaults
userDefaultsValuesPath=[[NSBundle mainBundle] pathForResource:@"UserDefaults" ofType:@"plist"];
userDefaultsValuesDict=[NSDictionary dictionaryWithContentsOfFile:userDefaultsValuesPath];

// set them in the standard user defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsValuesDict];

Si los valores predeterminados iniciales que está configurando no tienen valores predeterminados de LevelFive, entonces las llamadas fallarían.

Verifique el valor de retorno de -synchronize para errores.

Decidí dejar a un lado este problema y continuar con el desarrollo, que incluía agregar cosas después del nivel cinco para que el usuario pueda recorrer los niveles y volver al menú principal, y así sucesivamente ... y no estoy seguro de por qué, pero los valores predeterminados del usuario se están guardando para el nivel cinco ahora, así que no sé si es porque antes del nivel cinco fue lo último que hizo la aplicación y, aunque no finalizó e hizo otras cosas, tal vez no estaba escribiendo los valores predeterminados en el disco ... Todavía no estoy seguro de qué estaba mal, pero está funcionando ahora y no puedo hacer que falle para ver si puedo obtener un error con la sincronización ...

Gracias por la ayuda

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top