如何解决performFetch 创建具有过多数据的可区分数据源快照
在执行 NSBatchBatchInsertRequest
并调用 fetchedResultsController.performFetch()
后,frc 的委托方法 controller(_:didChangeContentWith:)
被调用,其中 NSDiffableDataSourceSnapshot<Section,NSManagedobjectID>
意外地包含 all 数据核心数据。
然而,我只是将新数据插入到 Core Data 中。当我使用数千个单元格进行测试时,对每个 performFetch
处的所有数据应用快照会导致高内存负载和抖动滚动。
有没有办法让这个委托方法只接收数据源增量更新的快照?
代码
NSFetchedResultsController
的创建方法如下:
let fetchedResultsController = NSFetchedResultsController<MyManagedobject>(
fetchRequest: fetchRequest,managedobjectContext: persistentContainer.viewContext,sectionNameKeyPath: nil,cacheName: nil
)
NSFetchRequest
:
let fetchRequest = MyManagedobject.fetchRequest()
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "value",ascending: true)]
fetchRequest.fetchBatchSize = 10
快照应用在下面的此 NSFetchedResultsControllerDelegate
方法中。
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>,didChangeContentWith snapshot: NSDiffableDataSourceSnapshotReference) {
dataSource.apply(snapshot as NSDiffableDataSourceSnapshot<Section,NSManagedobjectID>,animatingDifferences: false)
}
对我来说最明显的解决方案是仅实现此委托方法,但该方法似乎并未被调用:
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>,didChangeContentWith diff: CollectionDifference<NSManagedobjectID>) {
print(diff)
}
数据源到核心数据连接
- 当要求数据源为特定的
NSManagedobjectID
创建单元格时,会使用MyManagedobject
为该NSManagedobjectID
找到正确的fetchedResultsController.managedobjectContext.object(with:)
。 - 然后将
MyManagedobject
转换为Item
,最终用于配置单元。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。