2016-03-28 76 views
0

我的水平设置的plist中NSUserDefaults的更新嵌套字典

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 

我注册它们在AppDelegate中

​​

我d喜欢更新这些

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") 
} 

错误:

mutating method sent to immutable object


我会通过在变量选择快译通等级和密钥等,一旦它的工作


更新

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

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

回答

1

从用户的默认返回的字典是不变的,所以你需要一个可变的副本之前可以对其进行编辑:

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

还要注意,编辑词典将不会自动更新用户的默认值,你需要设置该密钥的新字典(用于替换旧设置的完整字典)。

+0

谢谢,可以发誓我试过了,但它现在工作:) defaults.setObject(level1Dict,forKey:“Level1”) 我也更新了这个问题 –