Swift UI操作Core Data异常:保存5条记录重启后仅显示1条
问题原因
你的Core Data只保存最后一条记录的核心问题在RedditViewModel的saveRecord方法中:你仅创建了一个ReditEntity实例,然后在遍历stories数组时反复覆盖这个实例的属性,最终只将最后一条story的数据保存到了Core Data中,而非每条story对应一个独立的实体。
修复方案
修改saveRecord方法,将创建ReditEntity的代码移动到forEach循环内部,确保每个story都生成一个新的Core Data实体:
public func saveRecord(viewContext: NSManagedObjectContext) { do { stories.forEach { story in // 每个story创建一个新的ReditEntity实例 let redit = ReditEntity(context: viewContext) redit.title = story.title redit.numComments = Int64(story.numComments) redit.score = Int64(story.score) redit.urlImage = story.thumbnail } try viewContext.save() } catch { print(error.localizedDescription) } }
额外建议
- 为避免重复数据,可在保存前检查Core Data中是否已有相同记录(比如根据
title或唯一标识符判断),防止每次启动重复插入。 - 给
ReditEntity添加唯一约束,从底层避免重复数据存储。
内容的提问来源于stack exchange,提问作者user8705895
相关产品推荐
相关产品推荐

