在 CoreData 中更新项目不会刷新 tableView

Posted

技术标签:

【中文标题】在 CoreData 中更新项目不会刷新 tableView【英文标题】:Updating item in CoreData doesn't refresh tableView 【发布时间】:2017-09-02 08:58:41 【问题描述】:

我有一个小问题,并尝试了一切来解决它。我知道这个问题,但我不知道如何解决它。我将 CoreData 与 fetchedResultsController 一起使用。我的实体称为“名称”,SortDescriptor 也用于“名称”。 如果我将一个 Item 保存到 CoreData 并更改名称值,FetchedResultsController 调用 .move 而不是 .update 并且我的 TableView 中的标签不会更新。重新启动应用程序或更改项目的不同值后,名称也会更新。 如果我有多个项目保存到 CoreData,一切正常。

如何将 SortDescriptor 保持在“名称”上,同时更新我的​​ tableView 中的值。

谢谢

【问题讨论】:

检查 .move 调用中的 indexPath 和 newIndexPath。如果它们相同,请更新标签。 【参考方案1】:

别忘了把:self.tableView.reloadData() 放在正确的位置。

【讨论】:

谢谢,我忘记将 tableView.reloadData() 放入 .move 案例中。认为 tableView.beginUpdates() 和 tableView.endUpdates() 会解决这个问题。我检查了 indexPath == newIndexPath 并重新加载了 tableView。否则移动该行。 现在,为了进一步优化它,您可以尝试在所需部分的正确单元格索引值处更新它。 :)【参考方案2】:

最简单的解决方案是通过 KVO 订阅我们数据项的 name 属性。只需将您的单元格添加为观察者,并在您的数据对象更改后立即更新您的 UI 元素。

注意。不要忘记在 prepareForReuse 中取消订阅

【讨论】:

以上是关于在 CoreData 中更新项目不会刷新 tableView的主要内容,如果未能解决你的问题,请参考以下文章

刷新 CoreData 表?

Core Data + CloudKit 不会在其他设备上自动刷新?

应用程序更新之间的 CoreData,表示默认数据刷新

添加项目并“刷新”脚本以设置样式时,Jquery Mobile 复选框列表不会更新

如何使用更新的数据刷新 NSManagedObject - Core Data

如何刷新/重新加载以更新对谓词的更改并因此获取请求?