2016-03-28 15 views
0

私は私はAppDelegate更新NSUserDefaultsネストされた辞書

​​

でそれらを登録してい

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 

など

defaultPrefs.plist

レベル設定のplistの

を持っていますこれらを更新したい場合は

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") 
を働いてたら、私はDictのレベルやキーなどを選択する変数を渡します

答えて

1

辞書はユーザデフォルトから返されたあなたは、あなたがそれを編集することができます前に、変更可能なコピーを作成する必要があるので、不変である:

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

注意も辞書を編集すると、自動的にユーザーのデフォルト値を更新し、設定する必要はありませんことをキーの新しい辞書(古い設定の完全な辞書を置き換える)。

+0

おかげで、私が試したことのだ誓ったかもしれないが、それが今取り組んでいる:) defaults.setObject(level1Dict、forKey:「レベル1」) を私もそれと質問を更新しました –

関連する問題