问题标签 [nsdiffabledatasourcesnapshot]

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 投票
1 回答
763 浏览

swift - UITableView/UICollectionView 委托中的 iOS 13 NSDiffableDataSourceSnapshot

我一直在使用新的 iOS 13 可区分数据源,发现它们使用起来非常简单直接。

但是我不确定一件事。是否建议使用 diffable 数据源的快照属性,例如在 UITableViewDelegate 中获取部分高度?

这是我原来的方法

dataSource是我的 diffable 数据源属性,并且footerHeight是我的 Section 枚举中的一个计算属性,由 diffable 数据源使用。

我看过一些创建对最新快照的引用的教程

并在他们每次对表数据源应用新快照时更新它。所以我的原始代码现在可能是这样的

从Apple文档来看,snapshot()每次都会创建数据源的方法,所以我觉得我的第一种方法不是很有效,因为对于每个部分,甚至可能是行,都会创建一个新的快照副本。

方法2是更好的方法吗?还是创建快照非常有效,因此方法 1 很好?


0 投票
2 回答
2156 浏览

swift - 如何在 UITableViewDiffableDataSource 中添加标题名称

我尝试为 中的每个部分添加标题UITableView,但在这种情况下UITableViewDiffableDataSource,我不知道应该在哪里做。我的代码的一部分:

UICollectionViewDiffableDataSource有一个参数supplementaryViewProvider,用户可以在其中配置标头。中是否存在这样的东西UITableViewDiffableDataSource

0 投票
1 回答
2275 浏览

uicollectionview - 将 NSDiffableDataSourceSnapshot 应用于 UICollectionViewDiffableDataSource 会导致“NSInternalInconsistencyException”

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

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

这是我的代码:

如果需要,我可以发布完整的调用堆栈。

0 投票
2 回答
412 浏览

ios - 使用 UIDIffableDataSource tableview 删除项目时,不调用 NFetchedResultsController 委托方法 didChangeContentWith

我正在尝试使用 UITableViewDiffableDataSource 实现我现有的 coredata 项目。我的 tableview 是使用 NSFetchedResultsController 和相应的委托方法耦合的。我可以使用 diffabledatasource 列出 tableview 中的数据。我的数据源使用以下泛型类型声明

为了在表格视图中启用编辑模式,我对 UITableViewDiffableDataSource 进行了子类化。我可以从表格视图中删除单元格,但不能从我的 coreData 中删除。删除单元格的代码如下

当我删除单元格时,不会调用下面的 NSFetchedResultsControllerDelegate 方法。

我不确定这是否是将 diffabledatasource 与 NSFetchedResultscontroller 耦合的正确方法。任何帮助将不胜感激。提前致谢

0 投票
4 回答
3276 浏览

ios - iOS13 DiffableDataSource 无效参数不满足:indexPath || 忽略无效项

我正在将我的集合视图转换为新的 iOS13 UICollectionViewDiffableDataSource...所以我需要按需更新单元格信息。

这是我的代码:

但我明白Invalid parameter not satisfying: indexPath || ignoreInvalidItems了……为什么?我的当前snap包含itemToUpdate以及我的模型数组...

我认为这是因为snap.indexOfItemIdentifier(itemToUpdate)找不到返回(NSNotFound)......但根据数据模型这应该是不可能的。

你有什么提示吗?

0 投票
2 回答
1461 浏览

ios - Diffable Snapshot 重新加载节标题

使用 重新加载表视图数据时NSDiffableDataSourceSnapshot,表视图将仅重新加载包含与先前快照不同的部分。

我有一个表格视图,其中包含具有特定日期的条目。根据用户在分段控件中选择的内容,条目按条目周/月/自定义日期范围的部分排序。

当我有一个星期部分并且本周是本月唯一存在的一周时,当用户选择不同的日期范围并且标题将保持不变时,该部分将不会更新。

无论此快照与上一个快照之间是否存在差异,如何才能重新加载所有节标题?

下面是设置快照的代码:

结果:

提前致谢。

0 投票
1 回答
853 浏览

ios - 从上下文菜单中删除 UICollectionViewDiffableDataSource 项时出现动画故障

我采用了新的 UICollectionViewDiffableDataSource。每次删除项目时,我都会应用数据源快照:

删除是通过内置的集合视图配置选项提供的:

如果我从上下文菜单之外删除该项目,则动画效果很好。如果我从上下文菜单中删除,则一个单元格消失,然后导致下一个单元格闪烁。我怀疑关闭上下文菜单和运行删除动画之间存在某种冲突。我正在寻找解决此问题的方法。

0 投票
2 回答
3611 浏览

objective-c - 如何在不使用 UITableViewDiffableDataSource 删除和插入的情况下重新加载项目?

我正在我的应用程序中使用UITableViewDiffableDataSource. 每个单元格代表一个搜索命中,并在单元格标题中突出显示搜索匹配项,有点像 Xcode 的“快速打开”窗口突出显示其结果项的一部分。在搜索字段中输入文本时,我会更新结果列表。结果随着相关性的变化在列表中上下移动。

诀窍是每次搜索文本更改时我都需要强制每个单元格重新渲染,因为新的搜索字符串意味着更新单元格标题的突出显示部分。但我不想动画删除和插入,因为它仍然是同一个项目。如何使用快照告诉数据源它需要重新加载单元格?

我这样声明数据源:

SearchHit代表一个搜索结果;它具有显示标题的属性和要在标题中突出显示的范围数组。它会覆盖hashisEqual:因此每个结果行都是唯一标识的。

我的代码看起来像这样:

起初我没有在reloadItemsWithIdentifiers那里打电话,然后一旦它出现在结果列表中,任何单元格都不会改变。添加reload调用有所帮助,但现在大多数单元格都在不断更新。这听起来像是我的代码中某处的逻辑错误,但我已经验证传递给快照的命中是正确的,而传递给数据源的单元格创建回调的命中不是。

Donny Wals 的这篇文章和这个涉及 Steve Breen 的相关 Twitter 线程建议解决此问题的方法是使项目标识符类型仅表示显示单元格所需的属性。所以我更新SearchHit了 's hash and equal comparison 以包括标题的突出显示部分,这是他们以前没有的。然后我在每次更新时为所有单元格删除和插入动画,这是我不想要的。

这似乎reloadItemsWithIdentifiers应该做什么......对吧?

GitHub 上的示例项目。

0 投票
0 回答
407 浏览

uicollectionview - 使用不同的数据源添加、更改和删除

好的,我有一个带有可区分数据源的集合视图的初步工作版本。一切正常,我刚刚实现了添加和更改项目,以及删除仍有待完成的项目。目前关于使用可区分数据源添加、更改和删除项目的信息很少。我想知道我做的所有数组的东西是否都是正确的方法。我觉得我应该对快照做更多的事情。保存方法中的所有逻辑都应该在更新方法中吗?任何帮助表示赞赏和/或有关此事的任何资源

0 投票
0 回答
938 浏览

swift - UICollectionViewCompositionalLayout 的粘性标题很生涩

我正在尝试使用最新的 UICollectionViewCompositionalLayout 来使用 UICollectionViewDiffableDataSource 显示分页数据。我想在该部分上方显示一个粘性标题,即使在从网络加载下一页数据时也始终保持在顶部。我注意到粘性标题没有按预期工作,而是在后台下载数据时感觉生涩并应用新快照。我能够使用 Apple在此处共享的示例应用程序重现此问题

这是重现该问题的代码:

上面的代码片段为 UICollectionViewCompositionalLayout 提供了部分标题,该部分标题固定到顶部的可见边界。

在上面的代码中,我将集合视图添加到视图控制器视图。

在上面的代码中,我创建了一个构建单元格和标题视图的 diffable 数据源。它还使用初始数据的快照初始化集合视图。快照始终应用在后台串行队列中。

当内容偏移接近尾声时,我将获取下一页数据并应用新快照,如您在此处看到的那样..

在此处输入图像描述

Pull To Refresh 操作也观察到类似的行为。

我注意到的另一件事是,当您立即添加数据并在线程之间切换时不会发生这种情况。

感谢任何帮助..