如何将 searchController 与 searchResultsController 一起使用?

问题描述

我创建了一个搜索控制器并向其中添加一个 searchResultsController。

MainController.swift

let searchController = UISearchController(searchResultsController: SearchResultVC())

我的搜索逻辑在 updateSearchResults 方法中工作,每次进行搜索时都会触发。这当然是由 UISearchResultsUpdating 协议提供的。这里我将我要查找的列表添加到SearchResultVC中tableView的数据中,并重新加载tableView。

MainController.swift

func updateSearchResults(for searchController: UISearchController) {

    guard let searchText = searchController.searchBar.text else { return }

    if let vc = searchController.searchResultsController as? SearchResultVC {
       vc.searchText = searchText
       vc.reminderList = search(searchText: searchText)
       if let vcTableView = vc.searchTableView { // HERE ISN'T TRIGGERED
          vcTableView.dataSource = vc
          vcTableView.delegate = vc
          vcTableView.reloadData()
          print("reloaded")
       }
    }
}

最后,我会在新打开的searchViewController中展示我的数据。

SearchResultVC.swift

final class SearchResultVC: UIViewController {

    var reminderList: [ReminderList] = []
    var searchText: String?

    @IBOutlet weak var searchTableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.searchTableView.delegate = self // HERE IS CRASHED
        self.searchTableView.dataSource = self // HERE IS CRASHED
    }
}

我的问题是无法重新加载。不触发reload()所在的分区。此外,新打开的页面self.searchTableView.delegate = self 并且 self.searchTableView.dataSource = self 崩溃了。

如何正确触发vcTableView.reloadData()

编辑

发生此错误

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...