问题标签 [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 回答
248 浏览

ios - 正确重新加载 UICollectionViewDiffableDataSource

所以我有一个带有 Diffable DataSource List CollectionView 的屏幕,当 ManagedContext 发生更改时,它将重新加载。

我现在重新加载的问题是单元格一直在随机变化,并且大多数时候它们会用来自不同部分的项目复制自己。

什么是重新加载这个的好解决方案?

}

还有我的对象:

0 投票
1 回答
265 浏览

ios - 为什么 Diffable Datasources 以不同的方式对待类和结构类型?

Diffable 数据源需要指定 aSectionIdentifierType和 anItemIdentifierType并且这些类型必须符合Hashable

假设它们必须符合,Hashable以便数据源可以进行差异化。

那么为什么即使 == 和散列函数相同,它的行为也会根据标识符类型是类还是结构而有所不同呢?或者甚至 === 函数也被类覆盖,使其更像一个值类型?

例子:

如果是一个结构,则表视图在被调用IntWrapper时什么都不做(基本上加载相同的数据)对我来说,这是预期的行为。apply()apply()

如果IntWrapper是一个类,则在调用 apply() 时表视图会重新加载。此外,hash()甚至没有调用 and == 函数。

除非有人可以访问源(提示,提示),或者除非我在示例中犯了一些错误,否则我认为无法回答这个问题。

0 投票
2 回答
145 浏览

arrays - Swift:使用 UUID 从数组中删除重复对象

我正在使用 UUID 来使用 DiffableDataSource,但我正在使用一个具有每个对象副本的数据集。

这是我在操场上使用的代码示例:

由于 UUID 是在初始化时添加的,在这种情况下是否有合理的方法来删除重复项?

0 投票
0 回答
42 浏览

ios - 无法让我的单元格在 diffable tableView 中使用用户编辑的信息进行更新

我正在尝试创建一个 Diffable tableView,用户可以在通过 segue 附加到单元格的单独编辑 tableview 中更新(即隐藏或显示包含可选属性的标签或图像)的单元格(信息和布局)。ListItem我首先添加了一个值是自定义类的 backingStore 属性。该类可以使用 UUID() 作为属性之一进行哈希处理。

然后我创建了一个方法来创建数据源,为单元格提供程序提供 UUID 以查找 listItem。我还使用填充 UUID 和 backingStore 的初始快照更新了 UI。

最后,当用户点击一个单元格,进行编辑并点击完成时,视图展开回这个控制器,我尝试在展开方法中更新数据源。就目前而言,该应用程序将创建第一个新单元格,但是当尝试第二个单元格时,它会重新加载第一行两次,并且随着我不断添加它将现有行加倍。我猜是因为我一遍又一遍地附加整个列表?我不知道如何访问附加的 uuid。

当我点击现有单元格并编辑它的信息时,它可以工作,但是如果我再次进入该行并出来,则该单元格会恢复到原来的状态。如果我继续尝试它会在原始状态和更新状态之间来回弹跳,就像它在快照之间来回弹跳一样?我觉得我错过了一些明显的东西,但我似乎无法弄清楚。有什么想法吗?

0 投票
1 回答
169 浏览

ios - UITableViewDataSourcePrefetching->prefetchRowsAt 在 indexPaths 数组中总是有 0 和 1

我使用 UITableViewDiffableDataSource 作为我的 tableView 的数据源。在初始加载时,从服务器获取 8 个项目并显示。当我尝试滚动时,

func tableView(_ tableView: UITableView, prefetchRowsAt indexPaths: [IndexPath]) {

被调用,但indexPaths总是有 0 和/或 1。请求预取 10、11、12 等行的请求永远不会递增。我在这里想念什么?

0 投票
1 回答
509 浏览

ios - 使用 diffable 数据源时如何处理空状态 - UICollectionViewDiffableDataSource?

在使用传统的 UICollectionView 时,我们经常使用下面的代码来处理空状态:

在 UICollectionView 或 UITableView 中使用可区分数据源时如何处理状态?

0 投票
0 回答
140 浏览

uitableview - > 20K 行的不同数据源性能问题

当拥有更大的数据集(大约 22,000 个项目)时,我遇到了 diffable 数据源的性能问题。我很惊讶在动画打开时应用快照需要这么多时间。见代码部分:

注意:Jesse Squires 提供了一个很好的资源:

我的问题是,鉴于应用快照是 O(n) 操作,我是否遗漏了某些东西或可区分的数据源无法更快地处理这个问题?

关闭动画,与 一样reloadData,会有所帮助。

示例代码是由SwiftLee根据这篇文章设置的。

在此处输入图像描述

请在此处查看示例项目。

示例视频在这里

更新(2021 年 9 月 2 日):这里有一个很好的 Twitter 讨论。

旁注:可以通过不设置 来改进示例应用程序,fetchBatchSize因为请求与NSFetchedResultsController. 见链接

0 投票
1 回答
181 浏览

swift - Swift Diffable Snapshot - 将新部分添加到快照并重新加载集合视图

我有一个包含部分和开头的集合视图。我想在用户创建数据并在新部分中显示数据后添加一个新部分。这是我尝试过但失败的代码。运行代码后,新部分不会出现。

谢谢!

0 投票
0 回答
11 浏览

ios - iOS 动画 diffable 数据源单元格更改

当单元格的基础数据发生更改并且因此需要重新加载单元格时,单元格标识符是否需要更改,或者我会以不同的方式管理它?

0 投票
1 回答
105 浏览

ios - 用于 Diffable 数据源的 Objective C Hashable 对象

我正在尝试在 Objective C 中实现一个带有可区分数据源的集合视图。我知道对于 Swift,UICollectionViewDiffableDataSource 的泛型类型是同时符合 Hashable 和 Identifiable 协议的类型。但我不知道这些对应于Objective C。

所以我的问题是我是否有这样的数据源属性:

那么我需要实施什么MyItemType才能使其正常工作?仅实现以下方法是否足够,或者这些方法不正确,我需要为 Objective C 实现其他方法?

  • - (BOOL)isEqual:(id)object
  • - (NSUInteger)hash
  • - (NSComparisonResult)compare:(MyItemType *)other

我需要为我的模型对象采用什么协议?

我的项目类型.h

这是模型项的定义。这些显示在集合视图列表布局中。