2016-03-28 42 views
0

Ich habe einen plist von Pegeleinstellungenaktualisieren NSUserDefaults Nested Wörterbuch

defaultPrefs.plist

Root  Dictionary 
Level1 Dictionary 
time  Number  0 
pushes Number  0 
moves Number  0 
unlocked Boolean YES 
Level2 Dictionary 
time  Number  0 
pushes Number  0 
moves Number  0 
unlocked Boolean NO 

etc

ich sie in der AppDelegate Registrierung

let plist: String? = "defaultPrefs" 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    let path = NSBundle.mainBundle().pathForResource(plist, ofType: "plist")! 
    let dict = NSDictionary(contentsOfFile: path) as! [String: AnyObject] 
    NSUserDefaults.standardUserDefaults().registerDefaults(dict) 
} 

I‘ Ich möchte diese

aktualisieren
func writeToPlist() { 
     let defaults = NSUserDefaults.standardUserDefaults() 
     let level1Dict:AnyObject = defaults.objectForKey("Level1")! 
     //let level1Dict:AnyObject = defaults.dictionaryForKey("Level1")! 
     level1Dict.setValue(1, forKey: "moves")   
     //level1Dict.setInteger(1, forKey: "moves") 
} 

Fehler:

mutating method sent to immutable object


ich in Variablen übergeben werden die Dict Ebene und den Schlüssel usw. zu wählen, sobald es

Arbeits ist

aktualisieren

let level1Dict:AnyObject = defaults.objectForKey("Level1")!.mutableCopy() 

level1Dict.setValue(1, forKey: "moves") 
defaults.setObject(level1Dict, forKey: "Level1") 

Antwort

1

Das Wörterbuch von Benutzervorgaben zurückgegeben wird, ist unveränderlich, so dass Sie eine veränderbare Kopie machen müssen, bevor Sie sie bearbeiten können:

let level1Dict:AnyObject = defaults.objectForKey("Level1")!.mutableCopy() 

Beachten Sie auch, dass die Bearbeitung der Wörterbuch nicht automatisch Benutzereinstellungen aktualisieren und Sie müssen festlegen das neue Wörterbuch für den Schlüssel (um das vollständige Wörterbuch der alten Einstellungen zu ersetzen).

+0

Danke, hätte schwören Ich hatte versucht, aber es funktioniert jetzt :) defaults.setObject (level1Dict, forKey: „Ebene 1“) Ich habe die Frage mit, dass auch aktualisiert –