问题描述
在执行 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 (将#修改为@)