首页 > 解决方案 > 尽管更改会导致 controllerDidChangeContent 调用 tableView.reloadData() 并反过来调用 numberOfSections,但没有更改部分信息

问题描述

这是在 Swift 的 iOS 开发中使用 NSFetchedResultsController 和核心数据的非常奇怪的情况。

起初,FetchedResultsController只包含未更改部分的信息,但没有更改部分信息,尽管更改导致controllerDidChangeContent方法调用tableView.reloadData方法,然后调用numberOfSections方法。

但随后的 FetchedResultsController 手动调用(例如在 viewWillAppear 中)会导致正确显示更改的部分信息以及其他未更改的部分信息。

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

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

标签: iosswifttableviewnsfetchedresultscontroller

解决方案


发现问题!!!在回答NSFetchedResultsController 调用 didChangeObject delete 而不是 update时,感谢 Michael

原因是我使用字符串插值作为数值的谓词。在改变了数字谓词的使用之后,神奇的事情发生了。感谢 Stackoverflow 社区!


推荐阅读