2016-03-28 28 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」) 我也更新了這個問題 –