0

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) 
} 

: - どちら

  1. viewWillDisappear/viewDidDisappear
  2. deinit{ if let superView = searchController.view.superview { superView.removeFromSuperview() } }

それは正しいことですか?

答えて

0

スーパービューから削除する前に、最初にアクティブになっているかどうかを確認する方がよいと思います。

関連する問題