问题标签 [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.
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 中?)
swift - 如何知道集合视图大纲何时展开?
我正在使用大纲视图样式UICollectionView
设置并像这样设置我的标题单元格:
但是,每当扩展单元格部分时,是否有可能接收到委托调用之类的东西?每当扩展列表时,我想从互联网上提取新数据。
uitableview - 如何在主线程内推送 DiffableDataSourceSnapshot 更新?
我是 UITableViewDiffableDataSource 的新手,当我准备 DiffableDataSourceSnapshot 并应用时?我可以看到更新是从Dispatch queue: com.apple.uikit.datasource.diffing
我期望所有 UI 操作都必须在其中触发的main-thread
,有没有人知道如何在主线程中推送它?
ios - UICollectionViewDiffableDataSource 动画
确实没有办法像使用 UITableViewDiffableDataSource 那样使用 UICollectionViewDiffableDataSource 为添加和删除的单元格设置动画吗?看起来 tableView 版本具有 defaultRowAnimation 属性,但 CollectionView 版本不存在这样的属性。理想情况下,我想从 tableView .default 动画样式中获得单元格折叠/展开动画
ios - 如何在我们应用快照时停止 UICollectionViewDiffableDataSource 滚动集合视图?
有什么方法可以让 UICollectionViewDiffableDataSource 在我们应用快照时停止滚动集合视图?
我正在使用这个库:https ://github.com/ra1028/DiffableDataSources
我有一种情况,我想在使用 UIRefreshControl 加载更多数据时保持集合视图滚动位置。
这就是我每次加载更多数据时更新快照的方式。
ios - 调用 performFetch 后限制 diffable 数据源快照的大小
问题
在执行NSBatchBatchInsertRequest
和调用之后fetchedResultsController.performFetch()
,frc 的委托方法controller(_:didChangeContentWith:)
被调用,NSDiffableDataSourceSnapshot<Section, NSManagedObjectID>
其中意外地包含了 Core Data 中的所有数据(即使我刚刚插入了新数据)。
代码
以下是它的NSFetchedResultsController
创建方式:
NSFetchRequest
:_
快照应用在下面的这个NSFetchedResultsControllerDelegate
方法中。
细节
Item
示例应用程序每 5 秒接收 10,000 个实例,并NSBatchInsertRequest
在新的后台上下文中运行一个performAndWait
以将 s 转换并存储Item
为MyManagedObject
实例。performFetch()
然后被调用main
。- 调用
performFetch()
可确保在 中提供新的快照controller(_:didChangeContentWith:)
,数据源可以apply(_:animatingDifferences:completion:)
更新 UI。 - 这些项目填充 a
UICollectionView
,它连接到 aUICollectionViewDiffableDataSource<Section, NSManagedObjectID>
。- 当数据源被要求为一个特定的单元格创建一个单元格时
NSManagedObjectID
,正确MyManagedObject
的为那个NSManagedObjectID
使用fetchedResultsController.managedObjectContext.object(with:)
。 - 然后将
MyManagedObject
转换为Item
,最终用于配置单元格。
- 当数据源被要求为一个特定的单元格创建一个单元格时
尝试解决方案
对我来说最明显的解决方案是仅实现此委托方法,但该方法似乎没有被调用:
我不希望用户界面在获取数据时出现卡顿和挂起。我认为发生这种情况的原因是因为我的快照很大。我猜为什么它们很大是因为我的获取请求获取了所有数据(但我只想将新数据添加到快照中)。为了解决这个问题,我尝试设置fetchLimit
一个像 2 这样的小数字,但这只会导致只获取 2 个项目。我想我可以通过更新来解决这个问题fetchOffset
,但是当我滚动时这种方法可能会变得混乱。调整fetchBatchSize
并没有什么不同。内存也没有泄漏。FWIW,我在后台队列中应用快照,但这似乎也没有改善 UI 卡顿。
我想在获取项目时将它们存储到 Core Data,然后仅在滚动到屏幕外单元格时从持久存储中获取。这似乎正在发生,因为当应用快照时,我可以看到数据源仅请求可见范围附近的索引路径的单元格(即使集合视图的垂直滚动条随着时间的推移而缩小)。但是快照的大小(= 到目前为止收到的项目总数)一直在增加。
我可以获得当前快照,并且只附加新快照中缺少的项目,但这仍然需要我通过无限大小的快照。我怎样才能避免这样做并加载大量数据而不会出现 UI 卡顿?我只是将新数据插入到 Core Data 中,那么为什么我会在快照中获取所有数据?
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 数据源?... -.-
arrays - 使用 tableview 和 CoreDataStack 和 Diffable 数据源删除核心数据中的记录
如果我问错了这个问题或包含了太多代码,请原谅。我做的最后一次编程是在 amiga 和 Psion 组织者上使用 basic。所以我是 swift 的新手,甚至是堆栈溢出的新手。我正在使用来自各种来源的信息(Angela Yu、Ray Wenderlich、谷歌和堆栈溢出以及许多其他来源,但我感到很困惑。我正在尝试创建一个简单的数据库应用程序,并且已经实现了很多我想要的,但我可以'现在不使用滑动来删除或确实执行删除记录。我需要知道的是]我需要什么代码来执行单元格的滑动并删除与之关联的数据。我已经包含了我正在使用的功能直到我改变了一些东西。b]我认为我说得对
ios - 无法使用 Firebase 数据库在 CollectionView 上找到数据。迅速
我正在尝试使用 Firebase 数据库中的数据填充我的 CollectionView。数据似乎很好,但没有任何反应,collectionView 单元格没有填充。我做错了什么???
这是我试图放入收藏视图的部分:
然后反对
这是我的 ViewController 代码
我的 Firebase 中的数据是
请帮忙,卡住了...
uitableview - 将 NSDiffableDataSourceSnapshot 应用于 UITableViewDiffableDataSource 导致“NSInternalInconsistencyException”
我正在尝试为我的 tableview 实现 UITableViewViewDiffableDataSource。我的代码编译得很好,但是我第一次对其应用快照时一直遇到此错误,并出现以下错误:
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效参数不满足:section < [_state.dataSourceSnapshot numberOfSections]”
这是我的代码:
BaseDisplayManager
可区分部分
BaseDiffableDataSource
}