検索コントローラーを作成し、それに 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()
正しくトリガーできますか?
編集