【发布时间】:2017-12-21 10:35:13
【问题描述】:
背景信息:
我们有一个从 Core Data 填充表格视图的应用程序。这个应用程序实现了一个同步机制,它在后台上下文中更新 CoreData 数据,并在完成后自动合并回主上下文。
为了简单起见,让我们假设一个 Message 和一个 Comment '实体',其中消息可以有零个或多个评论。我们为所有实体都继承了 NSManagedObjects 子类,因此在 Message 类中有一个名为 comments 的属性(类型为 Set<Comment>)。
应用程序的一个要求是视图可以仅在导航到新屏幕时更新屏幕上的数据。这意味着当您在屏幕上并且任何数据在后台更新时,可见数据应该保持相同。
我们的MessageViewcontroller 有一个私有属性message,它被填充到viewDidLoad。在cellForRowAt indexPath 中,我们使用cell.message = message.comments[indexPath.row]。
问题:
这样做的问题是,如果我们在后台上下文中更新了评论,该评论被合并回主上下文,则在 tableview 中上下“滚动”(再次触发cellForRowAt indexPath)将更新单元格带有更新的文本。
这是有道理的,因为我们的message 属性是一个引用,它代表我们CoreData 中的数据。
问题:
如何防止message 变量更新?或者换一种说法:如何在加载视图控制器时保留消息对象(及其关系)的“快照”?
解决方案?
我认为唯一可行的解决方案是创建一个具有相同属性的结构并在加载视图时填充它。我不太喜欢这种方法,因为我们的模型比Message 示例复杂得多,并且有很多关系、递归等。
【问题讨论】:
标签: ios swift uitableview core-data reference