更新 NSUserDefaults 嵌套字典
Update NSUserDefaults Nested Dictionary
我有一个关卡设置列表
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 中注册它们
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)
}
我想更新这些
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
一旦它工作了,我将传入变量来选择 Dict Level 和 Key 等
更新
let level1Dict:AnyObject = defaults.objectForKey("Level1")!.mutableCopy()
level1Dict.setValue(1, forKey: "moves")
defaults.setObject(level1Dict, forKey: "Level1")
从用户默认值返回的字典是不可变的,因此您需要先制作一个可变副本,然后才能对其进行编辑:
let level1Dict:AnyObject = defaults.objectForKey("Level1")!.mutableCopy()
另请注意,编辑词典不会自动更新用户默认设置,您需要为密钥设置新词典(以替换旧设置的完整词典)。
我有一个关卡设置列表
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 中注册它们
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)
}
我想更新这些
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
一旦它工作了,我将传入变量来选择 Dict Level 和 Key 等
更新
let level1Dict:AnyObject = defaults.objectForKey("Level1")!.mutableCopy()
level1Dict.setValue(1, forKey: "moves")
defaults.setObject(level1Dict, forKey: "Level1")
从用户默认值返回的字典是不可变的,因此您需要先制作一个可变副本,然后才能对其进行编辑:
let level1Dict:AnyObject = defaults.objectForKey("Level1")!.mutableCopy()
另请注意,编辑词典不会自动更新用户默认设置,您需要为密钥设置新词典(以替换旧设置的完整词典)。