他のView Controllerからビューが提供されている検索コントローラがあります。基本的に私は別のビューの中にNavBarButtonを持っており、それを押すとsearchcontollerが表示されます。Swift iOS SearchControllerがViewDidLoadで呼び出されていない
何らかの理由で、検索コントローラーがviewDidLoadで呼び出されていません。どんな考え?
Btw私はtableViewメソッドを追加しませんでした。これは、問題が発生していないためです。私がvar searchController: UISearchController!
にブレークポイントを置くと、ヒットします。
Inside viewDidLoad私がsearchController(anything)
にブレークポイントを置くと、問題がどこにあるのかが分かりません。
Inside numberOfRowsInSection...
let scopeButtonIndex = self.searchController.searchBar.selectedScopeButtonIndex
にブレークポイントを設定し、continueを押すと、selectedScopeButtonIndexがNil値を返すため、ここでクラッシュします。私はviewDidLoadで呼び出されていないので、それが無かったことに気づいた。self.searchController.searchBar.scopeButtonTitles = ["Sneaker Name","Sneaker Condition"]
なぜ私のsearchControllerを呼び出さないのですか?
class SearchViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchResultsUpdating, UISearchBarDelegate, UISearchControllerDelegate {
@IBOutlet weak var tableView: UITableView!
var searchController: UISearchController!
var userContent = [Sneakers]()
var filteredSearchSneakerNames = [Sneakers]()
var filteredSearchSneakerConditions = [Sneakers]()
override func viewDidLoad() {
super.viewDidLoad()
let backgroundColor = UIView(frame: CGRectZero)
self.tableView.tableFooterView = backgroundColor
//Nothing below this comment inside viewDidLoad is being called
self.tableView.backgroundColor = UIColor.whiteColor()
self.searchController = UISearchController(searchResultsController: nil)
self.searchController.delegate = self
self.searchController.searchBar.delegate = self
self.searchController.searchResultsUpdater = self
self.searchController.searchBar.showsCancelButton = true
self.searchController.searchBar.placeholder = "Search..."
self.searchController.searchBar.scopeButtonTitles = ["Sneaker Name","Sneaker Condition"]
self.searchController.searchBar.returnKeyType = .Done
self.navigationItem.hidesBackButton = true
self.searchController.dimsBackgroundDuringPresentation = false
self.navigationItem.titleView = searchController.searchBar
self.searchController.hidesNavigationBarDuringPresentation = false
self.definesPresentationContext = true
self.searchController.searchBar.sizeToFit()
self.tableView.tableHeaderView = self.searchController.searchBar
self.tableView.reloadData()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//I put a breakpoint here and it crashes
let scopeButtonIndex = self.searchController.searchBar.selectedScopeButtonIndex
if scopeButtonIndex == 0{
return self.filteredSearchSneakerNames.count
}else{
return self.filteredSearchSneakerConditions.count
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath...){
...
}
deinit{
self.searchController = nil
}
}
彼らは何の問題を持っていないので、私はupdateSearchResultsForSearchController
または他のsearchControllerの方法のいずれにも追加しませんでした。