この質問はこれまでに質問されていますが、この問題について明確な説明ができません。私は、テーブルビューと検索機能を持つ単純なアプリケーションを持っています。 viewDidLoad()
では、私は、このコードは正しく動作しないしないこのUISearchViewControllerに対してビューコントローラの表示を解除しようとしているときに、ビューコントローラを表示しようとしていません
let searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = true
searchController.dimsBackgroundDuringPresentation = false
self.tableView.tableHeaderView = searchController.searchBar
のように定義されているsetUpSearchView()
を呼び出します。コンソールで、私はこのエラー
Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior
を見ることができます。また、searchcontrollerは適切にアニメーション化しないと、私は検索バーに入力したときにupdateSearchResultsForSearchController
デリゲートを呼び出すことはありません。
しかし、これらの問題はすべて、searchController初期化関数を少し変更するだけで簡単に修正できます。関数内のローカル変数としてsearchController
を宣言するのではなく、var searchController:UISearchController!
のようなメソッドの外にインスタンス変数を宣言すると、すべての理由がわかりませんが、すべてが機能します。
今のコードは(setUpSearchViewでこの
var searchController:UISearchController!
のようになります。)ここで
searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = true
searchController.dimsBackgroundDuringPresentation = false
self.tableView.tableHeaderView = searchController.searchBar
はgithubの上のViewControllerへのリンクがある:これはなぜ起こるかhttps://github.com/tmsbn/marvel_heroes/blob/master/avengers/HeroesListController.swift
誰かが説明することができます?これは迅速なバグですか?それとも、私が知らないiOSの何かです。
これを参照すると、これが役立ちます。http://stackoverflow.com/questions/32282401/attempting-to-load-the-view-of-a-view-controller-while-it-is -deallocating-uis –