问题标签 [diffabledatasource]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
176 浏览

swift - 自定义集合视图布局:'无效参数不满足:self.supplementaryViewProvider'

我在我的视图控制器中使用了两个 collectionViews。1 的补充视图具有自定义布局和自定义属性。

这是视图控制器:

然后在我的自定义 TimelineLayout 我有

如您所见,我确实在视图控制器中创建了timelineDataSource 补充视图提供程序。然后在时间线布局中,我实现 layoutAttributesForElements(in rect: CGRect) 和 layoutAttributesForSupplementaryView(ofKind ...。后者永远不会被调用 - 错误首先出现。 layoutAttributesForElements(in rect: CGRect) 确实被调用并填充了 dayAttrs、monthAttrs、和 yearAttrs. 然而,错误仍然发生在之后:

libc++abi.dylib:以 NSException 类型的未捕获异常终止 *** 由于未捕获异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效参数不满足:self.supplementaryViewProvider || (self.supplementaryReuseIdentifierProvider && self.supplementaryViewConfigurationHandler)' 以 NSException 类型的未捕获异常终止

我错过了什么?

编辑:我想添加一个细节,当我在该supplementaryViewProvider 中放置一个断点时,它永远不会被调用。所以也许我在 layoutAttributesForElements 中做错了(在 Rect 中?)

0 投票
1 回答
218 浏览

swift - 如何知道集合视图大纲何时展开?

我正在使用大纲视图样式UICollectionView设置并像这样设置我的标题单元格:

但是,每当扩展单元格部分时,是否有可能接收到委托调用之类的东西?每当扩展列表时,我想从互联网上提取新数据。

0 投票
0 回答
59 浏览

uitableview - 如何在主线程内推送 DiffableDataSourceSnapshot 更新?

我是 UITableViewDiffableDataSource 的新手,当我准备 DiffableDataSourceSnapshot 并应用时?我可以看到更新是从Dispatch queue: com.apple.uikit.datasource.diffing我期望所有 UI 操作都必须在其中触发的main-thread,有没有人知道如何在主线程中推送它?

0 投票
0 回答
202 浏览

ios - UICollectionViewDiffableDataSource 动画

确实没有办法像使用 UITableViewDiffableDataSource 那样使用 UICollectionViewDiffableDataSource 为添加和删除的单元格设置动画吗?看起来 tableView 版本具有 defaultRowAnimation 属性,但 CollectionView 版本不存在这样的属性。理想情况下,我想从 tableView .default 动画样式中获得单元格折叠/展开动画

0 投票
0 回答
135 浏览

ios - 如何在我们应用快照时停止 UICollectionViewDiffableDataSource 滚动集合视图?

有什么方法可以让 UICollectionViewDiffableDataSource 在我们应用快照时停止滚动集合视图?

我正在使用这个库:https ://github.com/ra1028/DiffableDataSources

我有一种情况,我想在使用 UIRefreshControl 加载更多数据时保持集合视图滚动位置。

这就是我每次加载更多数据时更新快照的方式。

0 投票
0 回答
106 浏览

ios - 调用 performFetch 后限制 diffable 数据源快照的大小

问题

在执行NSBatchBatchInsertRequest和调用之后fetchedResultsController.performFetch(),frc 的委托方法controller(_:didChangeContentWith:)被调用,NSDiffableDataSourceSnapshot<Section, NSManagedObjectID>其中意外地包含了 Core Data 中的所有数据(即使我刚刚插入了数据)。

代码

以下是它的NSFetchedResultsController创建方式:

NSFetchRequest:_

快照应用在下面的这个NSFetchedResultsControllerDelegate方法中。

细节

  • Item示例应用程序每 5 秒接收 10,000 个实例,并NSBatchInsertRequest在新的后台上下文中运行一个performAndWait以将 s 转换并存储ItemMyManagedObject实例。
  • performFetch()然后被调用main
  • 调用performFetch()可确保在 中提供新的快照controller(_:didChangeContentWith:),数据源可以apply(_:animatingDifferences:completion:)更新 UI。
  • 这些项目填充 a UICollectionView,它连接到 a UICollectionViewDiffableDataSource<Section, NSManagedObjectID>
    • 当数据源被要求为一个特定的单元格创建一个单元格时NSManagedObjectID,正确MyManagedObject的为那个NSManagedObjectID使用fetchedResultsController.managedObjectContext.object(with:)
    • 然后将MyManagedObject转换为Item,最终用于配置单元格。

尝试解决方案

对我来说最明显的解决方案是仅实现此委托方法,但该方法似乎没有被调用:

我不希望用户界面在获取数据时出现卡顿和挂起。我认为发生这种情况的原因是因为我的快照很大。我猜为什么它们很大是因为我的获取请求获取了所有数据(但我只想将数据添加到快照中)。为了解决这个问题,我尝试设置fetchLimit一个像 2 这样的小数字,但这只会导致只获取 2 个项目。我想我可以通过更新来解决这个问题fetchOffset,但是当我滚动时这种方法可能会变得混乱。调整fetchBatchSize并没有什么不同。内存也没有泄漏。FWIW,我在后台队列中应用快照,但这似乎也没有改善 UI 卡顿。

我想在获取项目时将它们存储到 Core Data,然后仅在滚动到屏幕外单元格时从持久存储中获取。这似乎正在发生,因为当应用快照时,我可以看到数据源仅请求可见范围附近的索引路径的单元格(即使集合视图的垂直滚动条随着时间的推移而缩小)。但是快照的大小(= 到目前为止收到的项目总数)一直在​​增加。

我可以获得当前快照,并且只附加新快照中缺少的项目,但这仍然需要我通过无限大小的快照。我怎样才能避免这样做并加载大量数据而不会出现 UI 卡顿?我只是将数据插入到 Core Data 中,那么为什么我会在快照中获取所有数据?

0 投票
0 回答
356 浏览

ios - iOS table view diffable 数据源和预取

什么是正确的使用方法NSDiffableDataSourceSnapshot- (void)tableView:(nonnull UITableView *)tableView prefetchRowsAtIndexPaths:(nonnull NSArray<NSIndexPath *> *)indexPaths

似乎每次预取重新加载表视图时,表视图都会要求更多预取,在调用apply快照后,创建无限循环。

这是预取方法:

模型队列只是操作队列:

apply有没有一种方法可以在不要求更多索引的情况下对不同的数据源使用预取?

编辑:

所以调用reloadData预取方法会导致无限循环。根据https://andreygordeev.com/2017/02/20/uitableview-prefetching/

警告:不要从 tableView(_ tableView: UITableView, prefetchRowsAt indexPaths: [IndexPath]) 方法调用 tableView.reloadData() 或 tableView.reloadRows(...) !这些方法引发 UITableView 调用 prefetchRowsAt... 从而导致无限循环。

Soo.. Apple 打算如何将预取用于 Diffable 数据源?... -.-

0 投票
0 回答
37 浏览

arrays - 使用 tableview 和 CoreDataStack 和 Diffable 数据源删除核心数据中的记录

如果我问错了这个问题或包含了太多代码,请原谅。我做的最后一次编程是在 amiga 和 Psion 组织者上使用 basic。所以我是 swift 的新手,甚至是堆栈溢出的新手。我正在使用来自各种来源的信息(Angela Yu、Ray Wenderlich、谷歌和堆栈溢出以及许多其他来源,但我感到很困惑。我正在尝试创建一个简单的数据库应用程序,并且已经实现了很多我想要的,但我可以'现在不使用滑动来删除或确实执行删除记录。我需要知道的是]我需要什么代码来执行单元格的滑动并删除与之关联的数据。我已经包含了我正在使用的功能直到我改变了一些东西。b]我认为我说得对

0 投票
0 回答
22 浏览

ios - 无法使用 Firebase 数据库在 CollectionView 上找到数据。迅速

我正在尝试使用 Firebase 数据库中的数据填充我的 CollectionView。数据似乎很好,但没有任何反应,collectionView 单元格没有填充。我做错了什么???

这是我试图放入收藏视图的部分:

然后反对

这是我的 ViewController 代码

我的 Firebase 中的数据是

请帮忙,卡住了...

0 投票
1 回答
127 浏览

uitableview - 将 NSDiffableDataSourceSnapshot 应用于 UITableViewDiffableDataSource 导致“NSInternalInconsistencyException”

我正在尝试为我的 tableview 实现 UITableViewViewDiffableDataSource。我的代码编译得很好,但是我第一次对其应用快照时一直遇到此错误,并出现以下错误:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效参数不满足:section < [_state.dataSourceSnapshot numberOfSections]”

这是我的代码:

BaseDisplayManager

可区分部分

BaseDiffableDataSource

}