首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用快照更改后,DiffableDataSource无法正确更新

应用快照更改后,DiffableDataSource无法正确更新
EN

Stack Overflow用户
提问于 2022-02-08 17:23:34
回答 1查看 422关注 0票数 0

我正在尝试过滤TableViewDiffableDataSource中的用户列表。过滤后的用户数组传递给以下函数:

代码语言:javascript
复制
private func updateUserCell(_ users: Users? = nil) {

        guard let newUsers = users else {

            print("No users to show")

            return

        }

        snapShot.deleteItems(viewModel.userList)

        dataSource!.apply(snapShot, animatingDifferences: false)

        if newUsers == [] { return }

        var snapShot = dataSource?.snapshot()

        snapShot?.appendItems(newUsers, toSection: .main)

        dataSource!.apply(snapShot!, animatingDifferences: true)

    }

调试显示,用户在快照中得到正确的附加。但应用显示正确的过滤用户数量,但只有用户从顶部的完整列表。

也就是说,如果我有一个完整的用户名单克洛伊,麦克斯,约翰,马丁。寻找“乔”只给克洛伊看。“妈妈”的搜索显示克洛伊和麦克斯而不是麦克斯和马丁。

EN

回答 1

Stack Overflow用户

发布于 2022-02-08 17:57:18

我不确定我完全理解上述方法背后的逻辑,但除非我遗漏了一些代码片段没有说清楚的东西,否则一个简单得多的方法似乎只是与所需的用户创建一个新的快照,并加以应用,而不是修改现有的快照。

代码语言:javascript
复制
private func updateUserCell(_ users: Users? = nil) {
  guard let newUsers = users, !newUsers.isEmpty else {return}

  var snapshot = NSDiffableDataSourceSnapshot<Section, User>()
  snapshot.appendSections([.main])
  snapshot.appendItems(newUsers, toSection: .main)
  dataSource.apply(snapshot, animatingDifferences: true)
}

注:有一个默认为零的update用户方法,因此退出似乎是一个奇怪的设计选择。这表明,这种说法背后的逻辑有点偏颇。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71038132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档