我正在尝试过滤TableViewDiffableDataSource中的用户列表。过滤后的用户数组传递给以下函数:
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)
}调试显示,用户在快照中得到正确的附加。但应用显示正确的过滤用户数量,但只有用户从顶部的完整列表。
也就是说,如果我有一个完整的用户名单克洛伊,麦克斯,约翰,马丁。寻找“乔”只给克洛伊看。“妈妈”的搜索显示克洛伊和麦克斯而不是麦克斯和马丁。
发布于 2022-02-08 17:57:18
我不确定我完全理解上述方法背后的逻辑,但除非我遗漏了一些代码片段没有说清楚的东西,否则一个简单得多的方法似乎只是与所需的用户创建一个新的快照,并加以应用,而不是修改现有的快照。
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用户方法,因此退出似乎是一个奇怪的设计选择。这表明,这种说法背后的逻辑有点偏颇。
https://stackoverflow.com/questions/71038132
复制相似问题