iOS Swift中Core Data存储的结构体类型数组如何实现删除和更新
实现Core Data中选中条目删除&更新功能
你当前的实现是将完整的lendingData数组打包为JSON格式存在Core Data的ItemsInfo实体的values字段中,操作时需要先解码JSON为数组结构,修改完成后再编码存回Core Data即可,具体实现如下:
前置通用步骤
首先需要获取操作上下文并解码Core Data中存储的JSON数据:
// 获取全局上下文 let delegate = UIApplication.shared.delegate as! AppDelegate let context = delegate.persistentContainer.viewContext // 假设你已经拿到了当前要操作的目标ItemsInfo对象,命名为targetItemInfo guard let jsonData = targetItemInfo.values else { return } do { let decodeResult = try JSONDecoder().decode([String:[lendingData]].self, from: jsonData) var dataArray = decodeResult["allcreditData"] ?? [] // 解码完成后在当前do代码块内执行删除/更新操作 } catch { print("数据解码失败: \(error)") }
1. 选中cell对应数据删除实现
- 用选中cell的
indexPath.row作为数组要删除的下标 - 移除对应元素后重新编码存回Core Data
// 接上述解码完成的代码块内部 let selectedIndex = indexPath.row // 移除选中位置的元素 dataArray.remove(at: selectedIndex) // 重新编码并存回Core Data let newEncodeDict = ["allcreditData": dataArray] do { let newJsonData = try JSONEncoder().encode(newEncodeDict) targetItemInfo.values = newJsonData try context.save() // 刷新列表即可 tableView.reloadData() } catch { print("删除后数据保存失败: \(error)") }
2. 选中cell对应数据更新实现
- 拿到选中索引和修改完成的新
lendingData对象 - 替换数组对应位置元素后重新编码存回
// 接上述解码完成的代码块内部 let selectedIndex = indexPath.row // 假设你修改后的新lendingData对象名为updatedLendingData dataArray[selectedIndex] = updatedLendingData // 重新编码并存回Core Data let newEncodeDict = ["allcreditData": dataArray] do { let newJsonData = try JSONEncoder().encode(newEncodeDict) targetItemInfo.values = newJsonData try context.save() tableView.reloadData() } catch { print("更新数据保存失败: \(error)") }
注意:如果你的
ItemsInfo单条实体只存一组auditArray,上述逻辑可直接复用;如果单条实体存多组数据,仅需要调整获取targetItemInfo的匹配逻辑即可。生产环境不要使用try!强制解编码,建议统一通过do-catch捕获异常避免闪退。
内容的提问来源于stack exchange,提问作者islahulislam.ca
相关产品推荐
相关产品推荐

