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

Core Data数据显示异常求助:重复显示最后添加的数据

问题分析与解决方案

核心问题

添加第二条数据后两条内容均显示最后一条,删除一条后剩余数据显示正常——这是因为SwiftUI无法正确区分Core Data中的不同实体对象,导致视图复用和更新逻辑异常。

原因

SwiftUI的ForEach依赖唯一标识符来跟踪列表项的变化。如果你的InformationOne实体未正确实现Identifiable协议,或ForEach未指定唯一id,SwiftUI会无法区分不同实体,进而在列表更新时错误复用视图,显示重复内容。

解决方案

两种简单修复方式任选其一:

方式一:让实体实现Identifiable协议

在InformationOne+CoreDataProperties.swift文件中添加扩展,利用Core Data对象天生的唯一标识objectID:

extension InformationOne: Identifiable {
    public var id: NSManagedObjectID { objectID }
}

objectID是每个Core Data对象的固有唯一标识,不会重复,能让SwiftUI准确跟踪每个实体。

方式二:在ForEach中显式指定id

若不想修改实体代码,直接在ContentView的ForEach中指定使用objectID:

ForEach(results, id: \.objectID) { result in
    // 原有视图代码保持不变
}

额外建议

  1. 不要忽略Core Data保存错误,替换原有的try? moc.save()为带错误处理的代码,便于排查潜在问题:
do {
    try moc.save()
    dismiss()
    print("数据保存成功!")
} catch {
    print("保存失败:\(error.localizedDescription)")
}
  1. 确认InformationOne实体在Core Data模型中正确配置了所有属性(title、address等),且属性类型与代码赋值一致。

内容的提问来源于stack exchange,提问作者Deniss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:05:05