0

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

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


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

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

数据更新代码如下:

var snapshot = tableViewDataSource.snapshot()
snapshot.deleteAllItems()
snapshot.appendSections([.conversation])
snapshot.appendItems(conversationList, toSection: .conversation)
tableViewDataSource.apply(snapshot)

这是某种预期的行为吗?

4

1 回答 1

1

根据我的经验,您必须知道何时发生 UI 更新。UI 更新总是发生在主线程上。

当用户主动滚动时,我相信这会阻塞主线程,因此您的 diffable 数据源可能会更新,但您的应用程序无法更新 UI,直到用户从显示屏上松开手指。

于 2021-08-03T17:24:25.883 回答