Ошибка при поиске в новом 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)
        }
    }

Как я уже сказал, ошибка появляется именно тогда, когда я ввожу первую букву в строку поиска или когда удаляю ее. В остальном все работает нормально.

Любая помощь или советы будут очень благодарны!

0 ответов

Другие вопросы по тегам