2016-04-27 14 views
0

Dies ist, wie ich speichern die NSArray:NSUserDefaults kehrt NSDictionary statt NSArray

let defaults = NSUserDefaults.standardUserDefaults() 
    for item in data as NSArray { 
     if let id = item["id"] as? String { 
      defaults.setObject(item, forKey: "Content:" + id); 
      defaults.synchronize(); 
     } 
    } 

Aber wenn ich versuche, die gespeicherten Daten zu bekommen, musste ich

if let content = defaults.dictionaryForKey("Content:" + contentID) {} 

Andernfalls wird der Inhalt leer verwenden ist . Aber das wäre in Ordnung, wenn es eine einfache Methode geben würde, um dieses NSDictionary in ein NSArray zu bringen (wie es in einigen anderen Klassen benötigt wird, denen die Daten übergeben werden).

Gibt es etwas falsches beim Speichern des NSArray? BTW: Es ist ein Array, in dem die Schlüssel Strings sind. Etwas wie String: AnyObject.

Vielen Dank im Voraus!

Beste Stefan

+0

thx eric, aber ich möchte das Element selbst speichern, die ID soll einen eindeutigen Namen für das Objekt in den nsuserdefaults haben. – SteMa

+1

Ich meinte: "Daten" ist das Array, "Element" ist ein Wörterbuch ...: p – Moritz

+0

Sie speichern dies als Wörterbuch, dann wie als Array abrufen kann! – Lion

Antwort

2

Ich denke, Ihre Objekte einfach gut in Benutzereinstellungen festgelegt werden, aber Sie sparen Wörterbücher in Benutzereinstellungen (weil Ihr item ein Wörterbuch ist), das ist, warum Sie defaults.dictionaryForKey verwenden. Sie könnten das gesamte Array speichern

defaults.setObject(data as NSArray, forKey: "Some key"); 
+0

Sie haben völlig Recht, der Artikel ist ein NSDictionary. "Ich dachte für Artikel in Daten als NSArray" würde das Objekt auf NSArray werfen. Das war die Schuld. Vielen Dank! – SteMa

1

Die Linie

if let id = item["id"] as? String 

hoch ahnend mit ist. Wie kann ein Array-Element einen Wert aus einer Schlüssel-ID generieren? Ich denke also, du bist dir nicht sicher, ob es sich um Array oder Dictionary handelt. Sie speichern Dictionary in userdefaults, nur weil diese Zeile

for item in data as NSArray 

ein Erfolg ist. Das ist ein falscher Ansatz. Um dies zu verdeutlichen, versuchen Sie den folgenden Code.

let mydictionary = NSMutableDictionary() 
    mydictionary.setValue("123", forKey: "abc") 
    let data = [mydictionary] 
    for item in data as NSArray { 
     if let id = item["id"] as? String { 

     } 
    } 

Hier speichere ich ein NSMutableDictionary zu Daten. Und es ist

for item in data as NSArray 

Ich hoffe, Sie untergeben.

Verwandte Themen