【发布时间】:2016-06-03 21:53:24
【问题描述】:
我错过了什么...?
在我项目的其他地方有这样的代码:
let allUsers = ["userName":["difficulty": 1, "highscore": 50],"userName2":["difficulty": 2, "highscore: 75]]
defaults.setObject(allUsers, forKey: "allUsers")
我想为该用户数组中的一个用户更改一个值:
var allUsers = defaults.objectForKey("allUsers") as! [String:NSMutableDictionary]
let changingUser = allUsers["userName"]! as NSMutableDictionary
这些都不行:
changingUser.setObject(3, forKey: "difficulty")
changingUser["difficulty"] = 3
出现错误:
*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object”
【问题讨论】:
-
从
objectForKey返回的对象将是不可变的。您不能简单地将不可变字典向下转换为可变字典。您需要从用户默认返回的数组中创建一个新的 NSMutableArray,对其进行修改,然后将其写回。 -
您也可以最初键入您的 allUsers 字典,例如
let allUsers: [String:NSMutableDictionary] = ...。那时您对 NSMutableDictionary 的转换是正确的。
标签: ios swift nsmutabledictionary