0

検索コントローラーを作成し、それに 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 = selfself.searchTableView.dataSource = self

どうすればvcTableView.reloadData()正しくトリガーできますか?

編集

このエラーが発生します。 ここに画像の説明を入力

4

0 に答える 0