iOS Swift 更新数组中的字典

标签 ios swift nsmutablearray nsmutabledictionary

我的字典中有一个字典数组。我这样初始化它:

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/

相关文章:

ios - 从NSMutableDictionary构建NSMutableArray导致NSException

ios - STPopUpController 将点击的数据传递给底部表单样式 iOS

ios - 如何从以前的比例开始捏缩放手势?

ios - 如何删除 UIStackView 中两个 tableview 之间的空间?

ios - NSMutableArray 为每两个对象创建子数组,并在末尾注入(inject)一个空白字符串

Swift 'if let ... as?' 使用 NSMutableArray 安全解包

ios - 在 CoreData 之外使用自动生成的模型文件对象

ios - 如何知道文件正在通过 NSFileManager 写入

ios - 删除表情符号错误

arrays - 如何在 swift 中过滤具有其他数组值的结构数组?