Этот вопрос задан раньше, но я не могу получить четкое объяснение этой проблемы. У меня есть простое приложение с табличным представлением и функцией поиска. В viewDidLoad()
, я называю setUpSearchView()
, который определяется как этотПопытка загрузить представление контроллера просмотра во время его освобождения не разрешена для UISearchViewController
let searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = true
searchController.dimsBackgroundDuringPresentation = false
self.tableView.tableHeaderView = searchController.searchBar
Этот код не работает неправильно. На консоли, я вижу эту ошибку
Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior
Кроме того, searchcontroller не анимировать должным образом и не вызывает updateSearchResultsForSearchController
делегата, когда я печатаю на SearchBar.
Но все эти проблемы легко устраняются путем внесения незначительных изменений в функцию инициализации searchController. Вместо объявления searchController
в качестве локальной переменной в функции, если я объявляю переменную экземпляра вне метода вроде этого var searchController:UISearchController!
, все работает, хотя я понятия не имею, почему.
Теперь код будет выглядеть следующим образом
var searchController:UISearchController!
В setUpSearchView()
searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = true
searchController.dimsBackgroundDuringPresentation = false
self.tableView.tableHeaderView = searchController.searchBar
Вот ссылка на ViewController на GitHub: 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 –