0

我知道这是一个常见错误,并且已经讨论过很多次,但请听我说。我已经阅读了很多这些帖子,但没有一个提到我的具体案例,我自己也无法找到解决方案。

这是我得到的错误:

[Snapshotting] Snapshotting a view (0x7fab10c300b0, _UIReplicantView) that has not been rendered at least once requires afterScreenUpdates:YES.

根据我的观察,每次我开始在 searchController 中搜索时它都会出现。在我看来,当键盘更改时会弹出错误(从大写字母变为小写字母,反之亦然......)。

我试过了:

  • .layoutIfNeeded()我可能的任何地方(tableView、cells、view、searchBar...)
  • 所有 UI 更改都发生在主线程上
  • 玩弄不同的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)

    }

更新 diffable 数据源

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)
        }
    }

正如我所说,当我将第一个字母放入搜索栏中或将其删除时,错误会准确弹出。否则一切正常。

任何帮助或提示将不胜感激!

4

0 回答 0