Ich möchte zu überprüfen, ob der NSUserDefaults den Wert mit dem Schlüssel von dic
hat, dann die Daten laden und in loadedDic
speichern, wenn die Daten vorhanden sind, oder setzen Sie den Wert von loadedDic
und speichern Sie in NSUserDefaults
wenn nicht.NSUserDefaults.standardUserDefaults(). DictionaryForKey() zurückkehrt kompilieren Fehler
Die Aussage kommentiert mit error!
gibt eine Fehlermeldung:
Wert des Typs nicht zuordnen können
[String : AnyObject]?
zu[String : [String]]
Ich dachte, es wäre in Ordnung, da der Rückgabetyp der Methode dictionaryForKey
sagt AnyObject
. Noch verstehe mich nicht voll diesen ANYOBJECT Typen :(
jemand erklären kann, was den Fehler macht und wie soll ich dieses Problem kümmern? Vielen Dank im Voraus.
Der folgende Codeblock in viewDidLoad()
Methode ist . in einer UIViewController
Klasse
var loadedDic = [String : [String]]()
let defaults = NSUserDefaults.standardUserDefaults()
if defaults.dictionaryForKey("dic") != nil {
print("there's the value i want")
loadedDic = defaults.dictionaryForKey("dic")//error!
}else {
//some codes to set values of 'loadedDic'. this part works properly
defaults.setObject(loadedDic, forKey: "dic")
if defaults.synchronize(){
print("saved")
}
}
Verwenden Sie keine '.synchronize()', das ist veraltet. Die Standardwerte sind bereits gespeichert, sobald Sie '.setObject' ausführen. – Moritz
Die Standardwerte werden nicht gespeichert, sobald '.setObject' aufgerufen wird. Siehe Dokument hier: https://developer.apple.com/reference/foundation/userdefaults/1414005-synchronize – yuji