Was fehlt mir ...?setObject: forKey: mutierende Methode an unveränderliches Objekt gesendet
an anderer Stelle in meinem Projekt gibt es Code wie folgt:
let allUsers = ["userName":["difficulty": 1, "highscore": 50],"userName2":["difficulty": 2, "highscore: 75]]
defaults.setObject(allUsers, forKey: "allUsers")
ich einen Wert für einen Benutzer in diesem Array von Benutzern geändert werden soll:
var allUsers = defaults.objectForKey("allUsers") as! [String:NSMutableDictionary]
let changingUser = allUsers["userName"]! as NSMutableDictionary
Keines dieser funktioniert:
changingUser.setObject(3, forKey: "difficulty")
changingUser["difficulty"] = 3
mit dem Fehler:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'
Die von 'objectForKey' zurückgegebenen Objekte sind unveränderbar. Sie können ein unveränderliches Wörterbuch nicht einfach in ein veränderbares Wörterbuch abwandeln. Sie müssen ein neues NSMutableArray aus dem Array erstellen, das von den Benutzerstandards zurückgegeben wurde, dieses ändern und dann zurückschreiben. – Paulw11
Sie könnten auch zunächst allUsers eingeben, zum Beispiel 'allUsers: [String: NSMutableDictionary] = ...'. Ihre Umwandlung in NSMutableDictionary wäre zu diesem Zeitpunkt korrekt. – Wyatt