searchControllerはとしてTableViewControllerのviewDidLoad()
で宣言されています。ユーザーが現在の表ビューで行を選択すると、self.navigationController?.popViewControllerAnimated(true)
を使用して前のビュー・コントローラーにナビゲートします。この問題が発生するたびに、私は警告を受ける -popViewControllerAnimated(true)を使用してUITableViewからナビゲートするときのUISearchControllerの警告を修正する方法
これを避けるために
、私は「それが許可されていない割り当てを解除され、未定義の動作を引き起こす可能性がありながら、ビューコントローラのビューをロードしようとすると」ナビゲーションコントローラのpopViewControllerAnimated(true)
を呼び出す前に、スーパービューから検索コントローラを削除してください。
検索がアクティブで行が選択されている場合は、同じ警告は表示されません。私は最初に検索コントローラを却下してから前のコントローラにポップアウトしているかもしれないので、この場合は正常に動作します。しかし、もし私が検索がアクティブであるかどうかに関係なく、すべてのケースで検索コントローラを却下すれば、それは役に立たない。
ここにコードがあります。
私はこれが他のブロックの中で、上記のように正しいアプローチであるか、私は内に同じ操作を行う必要がある場合は理解したい//Dismiss searchController if active & Navigate to previous view controller on row selection
if self.searchController.active {
self.searchController.dismissViewControllerAnimated(true, completion: {
self.navigationController?.popViewControllerAnimated(true)
})
}
else {
//remove UISearchController from superView
self.searchController.view.superview?.removeFromSuperview()
self.navigationController?.popViewControllerAnimated(true)
}
: - どちら
viewWillDisappear/viewDidDisappear
deinit{ if let superView = searchController.view.superview { superView.removeFromSuperview() } }
それは正しいことですか?