我的字典中有一个字典数组。我这样初始化它:
var fillups:[NSMutableDictionary] = []
然后我像这样加载它:
fillups = userDefaults.object(forKey: car) as! NSArray as! [NSMutableDictionary]
然后,当我尝试更新数组中的字典元素时,出现“发送到不可变对象(immutable对象)的变异方法”错误。这是我更新记录的代码:
let dict=fillups[row]
dict.setValue(odometerField.text, forKey: "odometer")
dict.setValue(gallonsField.text, forKey: "gallons")
fillups[row]=dict
错误发生在我的第一个 setValue 行中。
最佳答案
从 NSUserDefaults
检索的对象是不可变的,即使它们在插入时是可变的。您需要获取从默认值中获得的不可变对象(immutable对象)并创建它们的可变版本。如果您不希望应用崩溃,也不应该在所有地方强制展开。
if let array = userDefaults.object(forKey: car) as? [NSDictionary] {
fillups = array.map { ($0.mutableCopy() as! NSMutableDictionary) }
}
您也不需要 fillips[row] = dict
行,因为 NSMutableDictionary
是引用类型,并且编辑从数组中提取的引用已经在编辑数组内的那个。
关于iOS Swift 更新数组中的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38596680/