没有更改的部分信息,尽管该更改导致controllerDidChangeContent调用tableView.reloadData()并依次调用numberOfSections

时间:2018-11-05 04:02:57

标签: ios swift tableview nsfetchedresultscontroller

这是在Swift开发的iOS开发中将NSFetchedResultsController与核心数据结合使用的一种非常奇怪的情况。

首先, FetchedResultsController 仅包含未更改节的信息,但不包含任何已更改节的信息,尽管更改会导致 controllerDidChangeContent 方法调用 tableView.reloadData 方法,然后调用 numberOfSections 方法。

但是随后的手动调用例如在viewWillAppear中,FetchedResultsController的结果可正确显示更改后的部分信息以及其他未更改的部分信息。

换句话说,在后台上下文中通过cloudkit提取的在 sectionNameKeyPath 中引用的属性的更改已保存到viewContext,这又将其保存到持久性容器中。在此过程中,调用了 controllerDidChangeContent 并调用了tableView.reloadData。那时,在 numberOfSections 中,在fetchedResultsController.sections中未观察到任何已更改的节信息,该信息仅包含未更改节的信息。我已将该属性名称设置为与fetchedResultsController关联的获取请求中的第一排序描述符。

我真的找不到任何不合逻辑的线索;任何想法都欢迎。

1 个答案:

答案 0 :(得分:0)

发现问题!!!感谢Michael回答NSFetchedResultsController calls didChangeObject delete instead of update

原因是我对数字值使用字符串插值的谓词。更改数字谓词的用法后,魔术发生了。感谢Stackoverflow社区!