小编Jas*_*rdy的帖子

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

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

这部分效果很好。但是当您在集合视图中遇到差异时,问题就来了。在 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)
Run Code Online (Sandbox Code Playgroud)

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

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

core-data nsfetchedresultscontroller uicollectionview

5
推荐指数
1
解决办法
592
查看次数

Swift 将 Future 与多个值结合起来?

我可能会以错误的方式处理这个问题,但我有一个函数,我想用它随着时间的推移发出多个值。但我不希望它在订阅该对象之前开始发出。I\xe2\x80\x99m 从 RxSwift 合并而来,所以我\xe2\x80\x99m 基本上试图在 RxSwift 世界中复制 Observable.create() 。我发现的最接近的是返回一个 Future,但 future 只会成功或失败(所以它们基本上就像 RxSwift 中的 Single 一样。)

\n\n

我在这里缺少一些基本的东西吗?我的最终目标是创建一个函数来处理视频文件并发出进度事件直到完成,然后发出已完成文件的 URL。

\n

swift rx-swift combine

2
推荐指数
1
解决办法
3238
查看次数