微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

performFetch 创建具有过多数据的可区分数据源快照

如何解决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 举报,一经查实,本站将立刻删除。