Ошибка при поиске в новом UITableViewDiffableDataSource [Snapshotting]
Я знаю, что это частая ошибка, о которой много раз говорили, но выслушайте меня. Я прочитал МНОГО из этих сообщений, и ни в одном из них не упоминается мой конкретный случай, и я не смог найти решение самостоятельно.
Я получаю вот такую ошибку:
[Snapshotting] Snapshotting a view (0x7fab10c300b0, _UIReplicantView) that has not been rendered at least once requires afterScreenUpdates:YES.
По моим наблюдениям, он появляется каждый раз, когда я начинаю поиск в searchController. Мне кажется, что ошибка выскакивает при смене клавиатуры (с заглавных на строчные, наоборот...).
Я пытался:
- положить
.layoutIfNeeded()
везде, где я только мог (tableView, cells, view, searchBar...) - все изменения пользовательского интерфейса происходят в основном потоке
- играя с разными
searchController.searchBar.searchTextField.becomeFirstResponder()
Излишне говорить, что ничто из вышеперечисленного не решило мою проблему.
Вот мой код для поиска:
func updateSearchResults(for searchController: UISearchController) {
let added = DBManager.shared.getAddedCurrencies()
DispatchQueue.main.async { searchController.searchBar.searchTextField.becomeFirstResponder() }
guard let filter = searchController.searchBar.text, !filter.isEmpty else {
filtering = false
filtered = []
updateDiffable(with: added)
return
}
filtering = true
filtered = added.filter({ (currency) -> Bool in
return currency.name.lowercased().contains(filter.lowercased()) || currency.code.lowercased().contains(filter.lowercased())
})
updateDiffable(with: filtered)
}
Обновление доступного источника данных
func updateDiffable(with list: [Currency], animate: Bool = true) {
var snapshot = NSDiffableDataSourceSnapshot<Section, Currency>()
snapshot.appendSections([.main])
snapshot.appendItems(list)
DispatchQueue.main.async {
self.diffableDataSource.apply(snapshot, animatingDifferences: animate)
}
}
Как я уже сказал, ошибка появляется именно тогда, когда я ввожу первую букву в строку поиска или когда удаляю ее. В остальном все работает нормально.
Любая помощь или советы будут очень благодарны!