You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:24:02