问题标签 [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 投票
1 回答
853 浏览

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

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

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

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

0 投票
2 回答
2788 浏览

ios - DiffableDataSource:快照不重新加载页眉和页脚

我正在使用UICollectionViewDiffableDataSourceforUICollectionView在多个部分中显示内容。

我正在使用 WWDC'19 中引入的 Collection View Compositional Layout and Diffable Datasources链接来呈现多节布局UICollectionView

我有一个简单的设置,每个部分的标题显示该部分中的项目数,页脚显示该部分所有项目的摘要。

第 1 节标题--> 2020 年 1 月 - 5 次旅行
第 1 节第 1 项-->第 1
节第 1 项第 2节--> 第 2
节第 1 项第 3节--> 第 3 节第 1 节第 4 项--> 第
4
节第 1 项5 --> 行程 5

现在如果删除行程,DiffableDataSource 会通过动画更新更改,但不会重新加载部分的标题。这看起来不一致。例如,如果行程 4 被删除,那么标题仍然显示该部分中有 5 个行程。如何让标头也使用 DiffableDataSource 重新加载?

对于临时修复,我只是 collectionView.reloadData()在显示 Diffing 动画的延迟后调用,然后我硬重新加载数据,这也会强制重新加载标题。

0 投票
1 回答
752 浏览

swift - 尝试配置 U​​ICollectionViewDiffableDataSource

显示该函数已被调用的打印语句出现在控制台中,但 { for 中的代码UICollectionViewDiffableDataSource不运行。

关于下一步在哪里进行故障排除的任何建议?非常感谢!

0 投票
3 回答
821 浏览

ios - 在所有成员初始化之前由闭包自我捕获 - 但我确实初始化了它们

这是一个玩具示例,但它完全减少了我所处的情况:

我正在尝试使我的表视图数据源自包含,而我这样做的方式(到目前为止)是将 UITableViewDiffableDataSource 子类化。这很好用,除非我尝试给我的子类一个自定义初始化程序。玩具示例显示了问题。

我想要填充单元格的方式绝对取决于可以在数据源生命周期后期更改的值。因此,它不能硬编码到单元提供程序函数中。我不能在这里简单地引用string初始化器中传递的值;我必须参考,self.string因为稍后其他代码将有权更改此数据源的string实例属性,并且我希望单元提供程序在发生这种情况时使用该新值。

但是,我收到错误“在所有成员初始化之前由闭包自我捕获”。这似乎不公平。我确实string在调用之前初始化了我的实例属性super.init。因此,在可能调用单元格提供程序方法的最早时刻,它确实具有价值。

0 投票
2 回答
5891 浏览

ios - *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“致命:提供的标识符不是唯一的。” ***

大家好 ‍♂️我正在将以下内容解析JSONUITableView使用 aUITableViewDiffableDataSource来获得漂亮的搜索动画。

JSON:https ://www.pathofexile.com/api/trade/data/items

这是回购:https ://github.com/laurentdelorme/PathOfData

从 JSON 中,我可以加载所有 13 个不同的类别,如模型文件中所映射的那样。然后我可以将这些类别中的数据推送到另一个 tableView(使用 的那个UITableViewDiffableDataSource)并很好地显示所有内容。

但是,当我尝试将其内容推送到 DetailViewController 时,有一个类别会使我的应用程序崩溃,这是初始ViewController.

这是我的模型:

这是我的 ViewController :

这是 DetailViewController :

这是我尝试访问“地图”类别时收到的错误消息:

我不知道这里发生了什么,所以如果有人有想法,那就太棒了

非常感谢 !

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 回答
952 浏览

swift - UITableViewDiffableDataSource 设置不同的单元格动画

UITableViewDiffableDataSource用来渲染单元格,我想知道如何精细地为行设置动画。

有楼盘

它适用于 tableView 的所有行,但我想要某些单元格的动画,而其他单元格没有动画。“defaultRowAnimation”中的“default”表明还有其他方法。

不幸的是,关于 subjet 的 Apple 文档有点轻

有没有一种方法可以RowAnimation根据给定IndexPath的例子询问 a ?

0 投票
1 回答
949 浏览

ios - 具有多种数据类型的 CollectionView 组合布局

我正在玩带有 Diffable DataSource 的 Compositional Layouts,到目前为止我很喜欢它。但我所有的努力都包括了单一类型的数据项。

我想要实现的是有两种不同类型的列表,比如说CarAirplane

到目前为止,我所做的是创建了布局,创建了一个Enum

dataSource初始化:

现在我卡住的部分是创建快照。

理想情况下,我想做的是

我在这里想念什么?

0 投票
2 回答
4296 浏览

ios - UITableViewDiffableDataSource 可以检测到更改的项目吗?

(在与下面的@AndreasOetjen 讨论后重写了这个问题。感谢他的评论。)

我遇到了使用UITableView可区分数据源的问题。在我的应用程序中,当用户修改一个项目时,它可能会更改同一表格视图中显示的另一个项目。问题是,在我创建并应用包含两个项目的新值的新快照后,间接更改的项目的 UI 没有更新。

起初我认为 diffable 数据源能够检测到项目在不同快照中的值变化。例如,它可能以这种方式工作:如果它发现两个快照包含相同的项目(即两个快照中的项目具有相同的哈希值),它会比较它们的值并在值更改时更新表视图中该项目的行。然而,我后来意识到它可能不是那样工作的,因为 diffable 数据源没有定义任何 API 来获取和比较项目值(我最初的想法是它使用了description计算属性和==操作,但现在我认为它不是真的)。

所以我目前的理解是 diffable 数据源使用项目的哈希来检测项目顺序变化(即插入新项目,旧项目仍然存在等),而不是项目值变化(即旧项目仍然存在但它的值改变了)。如果这种理解是正确的,那么它就引出了一个问题:如何使用 diffable 数据源来实现以下场景?

  • 一个项目有几个属性。一个属性(我们称之为属性 A)显示在 UI 中,但不用于生成哈希。
  • 该项目存在于旧快照和新快照中,但其属性 A 发生了变化。所以它的 UI 需要更新。

在旧UITableViewAPI 中,这可以通过调用reloadRows()或来实现reloadData()。但是如何使用 diffable 数据源呢?

更新

在花时间做实验并解决问题之后,我认为上述问题的理解是不正确的。请看下面我的回答。我相信这解释了可区分数据源的工作原理。我希望它对其他有同样困惑的人有所帮助。我很高兴被证明是错误的。真的。因此,如果您有不同的想法,请留下您的答案。

0 投票
0 回答
270 浏览

ios - 使用 diffable 数据源创建的 splitview 中的 Tableview 不滑动删除

我有一个 tableview 控制器,它是使用 diffable 数据源的拆分视图控制器中的主控,我试图找出一个问题,它无法通过滑动删除选项来运行。起初我尝试使用这一系列代码:

但这并没有产生任何结果,实际上滑动实际上是从 master 移动到 detail 的。所以我接下来尝试使用:

再次获得相同的结果,无论我尝试什么,滑动只会产生移动到细节。在我的应用程序中移动到主服务器时,我确实收到错误消息:

我不确定这是否会影响我正在做的事情,或者对此的解决方法是什么。这可能是问题吗?我该如何照顾它?该应用程序仍在运行,但没有滑动删除功能。我真的在这里挠头。