我在字典里面有一系列字典。我把它初始化为:
var fillups:[NSMutableDictionary] = []
然后我像这样加载它:
fillups = userDefaults.object(forKey: car) as! NSArray as! [NSMutableDictionary]
然后,当我尝试更新数组中的字典元素时,我得到“发送到不可变对象的变异方法”错误。这是我更新记录的代码:
let dict=fillups[row]
dict.setValue(odometerField.text, forKey: "odometer")
dict.setValue(gallonsField.text, forKey: "gallons")
fillups[row]=dict
错误发生在我的第一个setValue行中。
答案 0 :(得分:0)
如果你想改变你的dict,你需要用'var'声明它而不是'let'; 'let'代表常数。同时修复评论
指出的解缠问题let dict=fillups[row]
应该是
var dict=fillups[row]
答案 1 :(得分:0)
从NSUserDefaults
检索的对象即使在插入时也是可变的,也是不可变的。您需要从默认值中获取不可变对象并创建它们的可变版本。如果你不想让你的应用程序崩溃,你也不应该强行打开包装。
if let array = userDefaults.object(forKey: car) as? [NSDictionary] {
fillups = array.map { ($0.mutableCopy() as! NSMutableDictionary) }
}
您也不需要fillips[row] = dict
行,因为NSMutableDictionary
是引用类型,并且编辑从数组中拉出的引用已经在编辑数组中的引用。