2011-10-05 6 views
11

Vuoi aiutarmi? Ho trovato come salvare e recuperare oggetti semplici per usarli come impostazioni dell'app.NSUserDefaults.StandardUserDefaults - salvataggio e recupero di un dizionario

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

e successivamente è possibile recuperare in quel modo:

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

Ora, cosa succede se ho bisogno di salvare più nomi utente (come molti come voglio)? E se devo salvare più nomi utente con password o passhash?

risposta

12

Ecco un esempio per gli array (molte corde tenute con un solo tasto):

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

E l'esempio di un dizionario (chiave = valore) è mantenuto con una sola chiave:

 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

Vorrei prendere in considerazione l'utilizzo di dati di base se si dispone di molti utenti che si desidera cercare e filtrare. Se la tua app non è così complessa, puoi sempre serializzare un dizionario in una stringa e salvarlo come tale nei valori predefiniti dell'utente. Una buona libreria per la serializzazione JSON (de) è SBJSON http://stig.github.com/json-framework/.

+0

Ho pensato di serializzare roba, ma non posso trasformare il mio oggetto in NSObject usando NSObject.FromObject() ... restituisce null ... – Agzam

+0

Stai usando sbjson? In tal caso, è possibile importare SBJSON.h. Il tuo dizionario ha quindi un nuovo metodo jsonRepresentation che ti dà la stringa serializzata. Questa stringa è quindi possibile salvare. Se si recupera la stringa da userdefaults, è possibile chiamare JSONValue sulla stringa e restituirà un dizionario. – huesforalice

+0

No Sto tentando di utilizzare NSJsonSerialization.Serialize genera un'eccezione. Non ho ancora imparato come utilizzare le librerie ogg-c nei progetti MonoTouch ... Sembra che debba ora – Agzam

1

Ho avuto problemi a trovare NSUserDefaults per memorizzare dizionari. Quello che ho finito, è semplicemente ottenere la directory Documenti e salvare il mio dizionario in un file quando l'app sta terminando o andando in background, quindi caricandolo da un file al termine del caricamento dell'app. NSDictionary e NSMutableDictionary hanno metodi di classe che caricano o salvano da un file - e utilizzano XML serializzati, quindi è bello ed elegante.

Questo è un bene se l'app non ha bisogno di grandi quantità di dati, i dati sono semplici e la struttura è fluida.