iOS Swift更新数组中的字典

时间:2016-07-26 17:49:46

标签: ios swift nsmutablearray nsmutabledictionary

我在字典里面有一系列字典。我把它初始化为:

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行中。

2 个答案:

答案 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是引用类型,并且编辑从数组中拉出的引用已经在编辑数组中的引用。