2011-01-31 9 views
5

Tengo el siguiente código en mi inicialización (por primera vez) de mi aplicación:No se puede establecer NSUserDefaults campo

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *[email protected]"1"; 
[defaults setObject:uid forKey:@"init_val"]; 
[defaults synchronize]; 

Mucho más tarde en el código (en respuesta a una pulsación de botón) puedo comprobar el valor usando:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *initVal=[defaults objectForKey:@"init_val"]; 

initVal es siempre nulo. Lo he comprobado e init_val está configurado exactamente igual en mi paquete de configuración como otro campo que puedo configurar y leer sin problemas (ambos están configurados con un único campo llamado "Clave".

+0

Hm, impar ¿Ocurre lo mismo si usa -stringForKey: en lugar de -objectForKey :? Además, ¿sincroniza el resultado SÍ? – macserv

+0

Probé primero con stringForKey. Y sincronizar devuelve SÍ – mlewis54

+0

Consulte mi respuesta. Estoy seguro de que obtendrá su solución en mi respuesta. Deje un comentario si tiene algún problema con mi respuesta. –

Respuesta

5

@ mlewis54:

Puede probar este código. Estoy muy seguro de que funcionará para ti.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *[email protected]"1"; 
[defaults setObject:uid forKey:@"init_val"]; 
[defaults synchronize]; 

para recuperar datos que debe utilizar el siguiente código:

NSString *initVal=[[NSUserDefaults standardUserDefaults] valueForKey:@"init_val"]; 

O

NSString *initVal=[[NSUserDefaults standardUserDefaults] objectForKey:@"init_val"]; 

EDIT:

Si aún así da nil, a continuación, se puede utilizar el siguiente código:

NSString *initVal=[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] valueForKey:@"init_val"]]; 

O

NSString *initVal=[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"init_val"]]; 

la esperanza que esto le ayuda.

+0

Gracias por la respuesta. Finalmente lo conseguí trabajando de esta manera. Al final del día resultó ser discutible. Trasladé la funcionalidad de configuración a la aplicación y ya no utilizo el paquete de configuración o los valores predeterminados. Agradezco la opinión de todos. – mlewis54

+0

@ mlewis54: Eres bienvenido .. Me alegra que te haya ayudado. :-) –

0

No hay nada de malo en su código, he tratado de copiarlo en mi proyecto y funcionó bien, por lo que su error podría ser, probablemente, cuando se echa un initVal ...

¿cuál es el código que se utiliza para ver si initVal es nulo? y está usted Asegúrese de que cuando/donde compruebe initVal, ese var/oblect aún esté visible?

intente insertar esto inmediatamente después de su código de lectura:

NSLog(@"____text read in pref: %@", initVal); 

que escribe esto en mi ventana de la consola ->_ _TEXT leído en pref: 1

por supuesto que es una NSString, espero que mantener en mente que no es un entero o una NSNumber cuando se compruebe que ...

Luca

+0

Compruebo initVal usando if (! InitVal) {<<< luego no ingresado >>>}. Publicaré el valor del depurador cuando regrese al escritorio. Yo creo que es 0x0. No hay un problema de alcance ya que estoy ejecutando los enunciados seguidos (los 2 anteriores donde obtengo los valores predeterminados y luego el enunciado if). – mlewis54

+0

luego le aseguro que el código es correcto, intenté esto: NSString * initVal = [default objectForKey: @ "init_val"]; if (! InitVal) { \t NSLog (@ "__ 1__text leído en pref:% @", initVal); } else { \t NSLog (@ "__ 2__text leído en pref:% @", initVal); // esto se ejecuta } en la ventana de la consola: __2__text leído en pref: 1 luego un fallo debe estar en otro lugar ... tratar de "limpiar todos los objetivos" en el menú "construir" en Xcode hace ... sucede en el dispositivo o en el simulador? – meronix

+0

Ambos. Clean no ayudó. – mlewis54

0

¿seguro inicializar correctamente NSUserDefaults? Cuando inicializar, en mi aplicación delegado, siempre crear los valores predeterminados de usuario por defecto al crear un diccionario de los valores por defecto a continuación:

[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults]; 

Dónde appdefaults es el diccionario. Entonces deberías poder acceder a ellos correctamente.

+0

En otra parte del delegado de la aplicación configuré el diccionario con los pares por defecto (valor/clave). – mlewis54

1

Es necesario utilizar la línea

NSString *initVal = [defaults stringForKey:@"init_val"]; 

- ya que es una cadena que debe utilizar . De manera similar, puede usar boolForKey para obtener un valor booleano.

0

Es posible que la inicialización no esté sucediendo. Ponga un NSLog allí para verificar que se haya ejecutado.

0

Funciona bien para mí con el mismo código:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *[email protected]"1"; 
[defaults setObject:uid forKey:@"init_val"]; 
[defaults synchronize]; 

NSUserDefaults *defaultss = [NSUserDefaults standardUserDefaults]; 
NSString *initVal=[defaultss objectForKey:@"init_val"]; 
NSLog(@"Value of initVal: %@",initVal); 

O/P en la consola: Valor de initVal: 1

Así que trate de hacerlo con el mismo código con la impresión en la consola.

1

Decelare presente en un evento de clic de botón ...

NSUserDefaults *savedData = [NSUserDefaults standardUserDefaults]; 
[savedData setObject:userEmailTextField.text forKey:@"userid"]; 

y en la carga de cargar los datos y comprobar el valor que ha introducido se muestra o no ...

userEmailTextField.text =[[NSUserDefaults standardUserDefaults]objectForKey:@"userid"]; 
Cuestiones relacionadas