2011-10-05 14 views
11

¿Podrían ayudarme? Encontré cómo guardar y recuperar objetos simples para usarlos como configuración de la aplicación.NSUserDefaults.StandardUserDefaults - guardar y recuperar un Dictionary

NSUserDefaults.StandardUserDefaults.SetString("testUser","username"); 
NSUserDefaults.StandardUserDefaults.Init(); //Although it's strange that you have to call this method to actually save your stuff 

y posteriormente se puede recuperar de esa manera:

var username = NSUserDefaults.StandardUserDefaults.StringForKey("username"); 

Ahora, lo que si necesito guardar múltiples nombres de usuario (tantos como yo quiero)? ¿Y si necesito guardar varios nombres de usuario con contraseñas o passhashes?

Respuesta

12

He aquí un ejemplo para las matrices (muchas cadenas mantenido con una sola tecla):

 NSUserDefaults.StandardUserDefaults ["array"] = NSArray.FromStrings ("a", "b", "c"); 
     foreach (string s in NSUserDefaults.StandardUserDefaults.StringArrayForKey ("array")) { 
      Console.WriteLine (s); 
     } 

Y un ejemplo donde un diccionario (clave = valor) se mantiene con una sola tecla:

 NSDictionary dict = NSDictionary.FromObjectsAndKeys (new object[] { "user1", "user2" }, new object[] { "123", "abc" }); 
     NSString key = new NSString ("dict"); 
     NSUserDefaults.StandardUserDefaults.SetValueForKey (dict, key); 
     NSDictionary d2 = NSUserDefaults.StandardUserDefaults.DictionaryForKey (key); 
     for (int i = 0; i < d2.Count; i++) { 
      Console.WriteLine ("{0} : {1}", d2.Keys [i], d2.Values [i]); 
     } 
1

Consideraré usar core-data si tiene muchos usuarios que también quiere buscar y filtrar. Si su aplicación no es tan compleja, siempre puede serializar un diccionario en una cadena y guardarlo como tal en los valores predeterminados del usuario. Una buena biblioteca para la serialización JSON (de) es SBJSON http://stig.github.com/json-framework/.

+0

Pensé en serializar cosas, pero no puedo convertir mi objeto en NSObject usando NSObject.FromObject() ... devuelve nulo ... – Agzam

+0

¿Estás usando sbjson? Si es así, puede importar SBJSON.h. Su diccionario tiene entonces un nuevo método jsonRepresentation que le proporciona el String serializado. Esta cadena puede guardarla. Si recuperas el String de los userdefaults, puedes llamar a JSONValue en la cadena y devolverá un diccionario. – huesforalice

+0

No, estoy tratando de usar NSJsonSerialization.Serialize arroja una excepción. Todavía no aprendí cómo utilizar las bibliotecas Object-c en proyectos MonoTouch ... Parece que ahora mismo tengo que hacerlo – Agzam

1

Tuve problemas para obtener NSUserDefaults para almacenar diccionarios. Lo que terminé haciendo es simplemente obtener el directorio de Documentos y guardar mi diccionario en un archivo cuando la aplicación está terminando o yendo al fondo, y luego cargarlo desde un archivo cuando la aplicación termina de cargarse. NSDictionary y NSMutableDictionary tienen métodos de clase que se cargan o guardan de un archivo, y usa XML serializados, por lo que es agradable y elegante.

Esto es bueno si su aplicación no necesita una gran cantidad de datos, y los datos son simples y la estructura es fluida.