Я знаю, что это распространенная ошибка и много раз обсуждалась, но выслушайте меня. Я прочитал ОЧЕНЬ много этих постов, и ни в одном из них не упоминается мой конкретный случай c, и я не смог сам найти решение.
Это ошибка, которую я получаю:
[Snapshotting] Snapshotting a view (0x7fab10c300b0, _UIReplicantView) that has not been rendered at least once requires afterScreenUpdates:YES.
По моим наблюдениям, оно появляется каждый раз, когда я начинаю поиск в searchController . Мне кажется, что ошибка появляется при смене клавиатуры (с заглавных букв на мелкие, наоборот ...).
Я пробовал:
- размещение
.layoutIfNeeded()
везде, где только возможно (tableView, ячейки, 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)
}
}
Как я уже говорил, ошибка появляется именно тогда, когда я вставляю первую букву в строку поиска или удаляю ее. В противном случае все работает просто отлично.
Любая помощь или советы будут высоко оценены!