gpt4 book ai didi

core-data - NSFetchedResultsController + UICollectionViewDiffableDataSource + CoreData - 如何区分整个对象?

转载 作者:行者123 更新时间:2023-12-03 15:49:07 35 4
gpt4 key购买 nike

我正在尝试将 iOS 13 中内置的一些新差异类与 Core Data 一起使用。我遇到的问题是 controllerdidChangeContentWith没有按预期工作。它传递给我一个快照引用,它是对 NSDiffableDataSourceSnapshot<Section, NSManagedObjectID> 的引用。 ,这意味着我得到了已更改的部分/对象 ID 的列表。

这部分效果很好。但是当您在集合 View 中遇到差异时,问题就来了。在 WWDC 视频中,他们高兴地调用 dataSource.apply(snapshot, animatingDifferences: true)一切都神奇地工作,但在实际的 API 中并非如此。

在我最初的尝试中,我尝试了这个:

resolvedSnapshot.appendItems(snapshot.itemIdentifiersInSection(withIdentifier: section).map {
controller.managedObjectContext.object(with: $0 as! NSManagedObjectID) as! Activity
}, toSection: .all)

这适用于填充单元格,但如果单元格(即单元格标题)上的数据发生更改,则永远不会重新加载特定单元格。我查看了快照,似乎问题只是我引用了这些事件对象,因此它们都同时更新(意味着旧快照中的事件等同于新快照中的事件,因此哈希值相等。)

我当前的解决方案是使用一个包含我所有 Activity 类变量的结构,但这会将它与 CoreData 断开连接。所以我的数据源变成了: var dataSource: UICollectionViewDiffableDataSource<Section, ActivityStruct>这样快照实际上会得到两个不同的值,因为它有两个不同的对象要比较。这有效,但它似乎远非优雅,这就是我们打算使用它的方式吗?或者它现在只是处于 splinter 状态? WWDC 视频似乎暗示它不应该需要所有这些额外的样板。

最佳答案

我遇到了同样的问题,我想我找到了有效的方法:

有两个类:UICollectionViewDiffableDataSourceUICollectionViewDiffableDataSourceReference
据我所知,当您使用第一个时,您将所有权作为“真相的来源”,因此您创建了一个充当数据源的对象。当您使用第二个(数据源引用)时,您将“真实来源”推迟到另一个数据源(在本例中为 CoreData)。

你会实例化一个 ...DataSourceReference...DataSource 的方式基本相同:

dataSourceReference = UICollectionViewDiffableDataSourceReference(collectionView: collectionView, cellProvider: { (collectionView, indexPath, object) -> UICollectionViewCell? in
let identifier = <#cell identifier#>
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: identifier, for: indexPath)

<#cell configuration#>

return cell
})

然后当您实现 NSFetchedResultsControllerDelegate 时,您可以使用以下方法:
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChangeContentWith snapshot: NSDiffableDataSourceSnapshotReference)
{
dataSourceReference.applySnapshot(snapshot, animatingDifferences: true)
}

我也观看了 WWDC 视频,但没有看到引用。必须犯一些错误才能到达这里。我希望这个对你有用!

关于core-data - NSFetchedResultsController + UICollectionViewDiffableDataSource + CoreData - 如何区分整个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58485982/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com