在 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的主要内容,如果未能解决你的问题,请参考以下文章
Core Data + CloudKit 不会在其他设备上自动刷新?
添加项目并“刷新”脚本以设置样式时,Jquery Mobile 复选框列表不会更新