ios - 尽管更改会导致 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 关联的提取请求中的第一个排序描述符。
我真的找不到任何不合逻辑的线索;欢迎任何想法。
解决方案
发现问题!!!在回答NSFetchedResultsController 调用 didChangeObject delete 而不是 update时,感谢 Michael
原因是我使用字符串插值作为数值的谓词。在改变了数字谓词的使用之后,神奇的事情发生了。感谢 Stackoverflow 社区!
推荐阅读
- ios - 当 z-index 设置为非零值时,未在视图上调用触摸代理
- java - Java接口和类中的多个泛型
- css - css 圆形边框大小与空白和抗锯齿
- javascript - 如何修改谷歌应用脚本中的链接
- java - 如何将任意 JSON 字符串反序列化为 java POJO?
- three.js - 在 Blender 中未应用缩放时修复 Three.js 模型
- sql - SQLite - 使用通配符加入
- url - 在 VBScript 中解析 URL
- google-cloud-platform - 如何解决 Google Dataflow 中的稳定性问题
- sql - 组合复杂数据透视表中的列