2012-03-30 11 views
40

Tengo un NSMutableDictionary, y le he agregado valores (varios pares de claves). Ahora necesito guardar este NSMutableDictionary en un objeto NSUserDefaults.Guardar NSDictionary a NSUserDefaults

1.) Mi código es el siguiente; No estoy seguro de si es correcto, y también necesito saber cómo recuperar NSMutableDictionary desde NSUSerDefault?

2.) Después de recuperar el NSMutableDictionary, necesito guardarlo en un NSDictionary. ¿Cómo podría hacer esto?

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init]; 

[dic addObject:@"sss" forKey:@"hi"]; 
[dic addObject:@"eee" forKey:@"hr"]; 

[NSUserDefaults standardDefaults] setObject:dic forKey:@"DicKey"]; 
[[NSUserDefaults standardDefaults] synchronize]; 
+5

También necesita llamar '[[NSUserDefaults standardDefaults] synchronize];' para guardar. ¿Con qué estás luchando exactamente? Ha mencionado lo que quiere hacer, pero no dónde tiene problemas. El código que has incluido arriba (aparte de un '(') faltante se ve bien. – Sam

+0

Necesito guardar algunos pares clave-valor y acceder a él desde una vista diferente. Así que pensé en usar NSUserDefaults para esto y también NSDictionary. Finalmente tendré que completar una tabla con estos valores. – shajem

+0

A menos que agregue más detalles, dudo que obtenga más respuestas. Estás poniendo las cosas bien. ¿No encuentras el diccionario cuando llamas '[[[NSUserDefaults standardDefaults] objectForKey: @" DicKey "]'? Tenga en cuenta que este será un tipo 'NSDictionary *' y NO un 'NSMutableDictionary *'. Si desea manipular datos entre vistas, considere almacenar los datos en un modelo de datos que pase a ambas vistas (o proporcione un acceso directo único dependiendo de cuán genérico/visible desee que sean los datos). – Sam

Respuesta

74

Su código es correcto, pero la única cosa que tienes que tener en cuenta es que NSUserDefaults no distingue entre objetos mutables e inmutables, así que cuando te lo devuelve que va a ser inmutable:

NSDictionary *retrievedDictionary = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"DicKey"]; 

Si desea un diccionario mutable, sólo tiene que utilizar mutableCopy:

NSMutableDictionary *mutableRetrievedDictionary = [[[NSUserDefaults standardUserDefaults] objectForKey:@"DicKey"] mutableCopy]; 
+0

Recuerde que, al usar 'copy', conserva el objeto, por lo que se convertirá en el propietario y será responsable de liberarlo. – Saphrosit

+22

Gestionar manualmente la memoria es, como, cualquiera que sea. – yuji

+2

Estoy usando ARC. Y, necesito guardar un NSMutableDictionary a NSUser Defaults, y obtener un NSDictionary desde NSUserDefaults. Entonces, ¿tengo que usar tu primer enfoque, supongo? – shajem

5
NSMutableDictionary *profileDictionary = [[NSMutableDictionary alloc] init]; 
[profileDictionary setObject:txt_Username.text forKey:@"USERNAME_KEY"]; 
[profileDictionary setObject:txt_Password forKey:@"PASSWORD_KEY"]; 
[[NSUserDefaults standardUserDefaults] setObject:profileDictionary forKey:@"PROFILE_KEY"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

Esto es lo que esperabas.