问题标签 [uitableviewdiffabledatasource]

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

ios - 单元格未使用 UIViewController 中的 UITableViewDiffableDataSource 填充

在我将子类从 UITableViewController 更改为 UIViewController 之前,我的代码正在运行。

切换的原因是我需要在我的 tableView 之上添加一个 collectionView。

但现在细胞没有填充。快照仍在被调用,用户数组有它的内容。

不知道为什么更改为 UIViewController 会使单元格停止填充。

0 投票
0 回答
59 浏览

swift - 我可以在 UIView.animate 中使用 DiffableDataSource 动画吗?

我正在玩UITableViewDiffableDataSource,并且我试图在更改数据源时为此函数添加延迟和持续时间: open func apply(_ snapshot: NSDiffableDataSourceSnapshot<SectionIdentifierType, ItemIdentifierType>, animatingDifferences: Bool = true, completion: (() -> Void)? = nil)

我的代码:

我想要:

  1. 立即隐藏按钮
  2. 3 秒后,使用 diffableDataSourceSnapshot 函数更改视图。

但是,UIView 动画块似乎不起作用,我看到的是应用程序立即执行 diffableDataSourceSnapshot 动画,没有持续时间和延迟。

无论如何我可以在 UIView 动画块中使用那个“应用”功能吗?

0 投票
0 回答
76 浏览

ios - 将 animatingDifferences 设置为 true 时,使用 UITableViewDiffableDataSource 将单元格移动到新部分会使应用程序崩溃

所以我正在尝试学习如何使用UITableViewDiffableDataSource和将单元格移动到不同的部分时遇到问题。现在我只是专注于将单元格插入朋友部分。问题是应用程序在设置为 true.apply(snapshot, animatingDifferences: animatingDifferences)时崩溃。animatingDifferences当它设置为 false 时,它​​不会崩溃,但这不会给用户在新部分中插入单元格时带来令人愉悦的效果,它会产生一种我不想使用的“活泼”效果。

这是我得到的错误:

“无效更新:第 0 节中的行数无效。更新后现有节中包含的行数 (4) 必须等于更新前该节中包含的行数 (4),加上或减去从该部分插入或删除的行数(0 插入,0 删除)加上或减去移入或移出该部分的行数(1 移入,0 移出)。

我查看更新后该部分中的行数,它确实返回了正确的新值但仍然崩溃?

现在我的 DiffableDataSource 如下:

然后在我里面我EditEnabledDiffableDataSource有这个:

在此处输入图像描述

0 投票
1 回答
110 浏览

uitableview - tableView(canEditRowAt) 不再使用 tableViewDiffableDataSource

我创建了一个相当简单的 tableView 来为项目模型选择类别。昨天一切正常。今天,我一直在尝试将 tableView 数据源切换到 a UITableViewDiffableDataSource,因为我想围绕 API 进行思考。我已经备份并运行了整个 tableView,除了我不能再编辑我的行了!

当我点击导航栏中的编辑按钮时,该setEditing逻辑newCategoryButton被禁用,当我再次点击它时,该逻辑被启用。但是,我永远无法滑动删除,并且在编辑模式下,删除图标不会显示在我的行旁边。

我尝试删除setEditing,清空commit editingStyle并简单地设置canEditRowreturn true但仍然没有。

任何帮助将不胜感激。感谢!

点击编辑按钮后的屏幕截图

0 投票
0 回答
414 浏览

swift - 移动/删除 Diffable TableView 行

我正在尝试将 tableView 更新为 UITableViewDiffableDataSource 但我无法删除/移动行。在上一个问题的帮助下,我对 dataSource 进行了子类化,并在那里添加了 tableview 覆盖。这些行将被编辑,但是当我离开并返回视图时,它们会回到原来的状态,因为我在 VC 中的数据模型没有随着编辑而更新。有人能帮忙吗?

}

编辑**

我通过添加 backingStore 取得了一些进展,并且更接近能够更新现有单元格。然而,我最终只是一直陷入同一个错误循环中。

ListItem我首先添加了一个值是自定义类的 backingStore 属性。该类可以使用 UUID() 作为属性之一进行哈希处理。

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

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

当我点击现有单元格并编辑它的信息时,它可以工作,但是如果我再次进入该行并出来,则该单元格会恢复到原来的状态。如果我继续尝试它会在原始状态和更新状态之间来回弹跳,就像它在快照之间来回弹跳一样?

0 投票
0 回答
63 浏览

ios - 尝试添加功能以能够播放打印 UITableView

我有一个(待办事项)列表应用程序。数据布置在具有自定义单元格的 diffable dataSource tableview 中。我有一个功能正常的下拉菜单,我正在尝试添加一个print按钮,以便用户可以根据需要打印出列表(在许多列表应用程序中似乎是标准的)。

到目前为止,我在按钮的操作中有以下内容:

和代表:

如您所见,我正在尝试将 tableview 转换为 PDF 并打印(其他可能会更好?)。.exportAsPdfFromTable()tableView 上的方法是一个UITableView扩展,如下:

}

结果是打印控制器显示一个空白页。关于我所缺少的任何想法?

0 投票
1 回答
77 浏览

ios - 如果用户滚动,UITableView 不会加载新状态

已解决:这与 UITableViewDiffableDataSource 无关。问题是从 2 个不同的线程顺序访问领域并且没有得到一致的结果

其中一个线程是主线程,并且滚动以某种方式使主线程忙并触发了竞争条件


如果用户在更新发生时不滚动表格视图,则一切正常。

如果用户正在滚动或只是用手指在 tableview 上,则更新时不会发生动画并且不会显示差异。我在控制台中没有收到任何错误

数据更新代码如下:

这是某种预期的行为吗?

0 投票
0 回答
140 浏览

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

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

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

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

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

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

在此处输入图像描述

请在此处查看示例项目。

示例视频在这里

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

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

0 投票
0 回答
50 浏览

swift - 使用 UITableViewDiffableDataSource 时,cellProvider 在部分删除后不更新

我有一些代码加载到一些空的部分和项目中。然后,如果存在网络连接,则会对可见单元进行一些调用。我在每个部分都有一个按钮,它根据使用 indexPath 的部分类型导航到另一个视图。我的问题是,当我删除第一个部分时,cellProvider 不会更新 indexPath 并且按钮导航到错误的视图。但是,如果我滚动,问题就会消失。如何确保 indexPath 更新?编辑:看来我的 headerViews 保留了旧的 indexPath,但 cellProvider 正确更新。滚动并返回后,标题视图将设置为正确的 indexPath。

0 投票
0 回答
36 浏览

swift - UITableViewDiffableDataSource iPad 问题

我有一条崩溃错误消息 - 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效参数不满足:itemIdentifier”

我使用 UITableViewDiffableDataSource 来实现我的 UITableView。当我尝试“dataSource?.apply”时发生了崩溃。它只发生在 iPad 上,iPhone 工作正常

您知道什么是原因以及如何解决吗?

代码示例