在多个部分进行搜索时出现异常。在数据源上应用快照时会发生这种情况。
背景:我有(预定义的)部分,每个部分都有一个项目集合。如果节中没有项目,节将不会出现在 viewController 中。通过应用程序的功能添加项目。在其中一个部分中添加项目后,将调用数据源更新并将显示添加了该项目的部分。
问题:尝试两次搜索不存在的项目时遇到此问题。要重现,您可以输入一个不存在的项目,然后通过退格删除搜索字符串,然后再次输入一个不存在的项目,然后 dataSource.apply() 将抛出错误。
希望有人可以提供帮助。蒂亚!
这是代码:
func updateData(on searchItem: String = "") {
//create a snapshot that will be used by the datasource to apply the diff changes
snapshot = NSDiffableDataSourceSnapshot<Section, Item>()
Manager.shared.getAllSections().forEach { section in
let items = section.items
//if search string is empty, we just assign the items of the section,
//else we filter it based on the searchItem
var filteredItems = searchItem.isEmpty ? items :
items.filter { $0.itemName.lowercased().contains(searchItem.lowercased()) }
//if theres no items filtered, we ain't appending any section and items
if filteredItems.count > 0 {
snapshot.appendSections([section])
snapshot.appendItems(filteredItems)
}
}
//when calling apply, i get the exception when calling apply on dataSource
dataSource.apply(snapshot, animatingDifferences: false)
}
//Here is the updateSearchResults delegate method triggered when typing something in the search bar
func updateSearchResults(for searchController: UISearchController) {
guard let searchedItem = searchController.searchBar.text, !searchedItem.isEmpty else {
updateData()
return
}
updateData(on: searchedItem)
}