Как исправить предупреждение для UISearchController при выходе из UITableView с помощью popViewControllerAnimated(true)
SearchController объявлен в viewDidLoad()
TableViewController как searchController = UISearchController(searchResultsController: nil)
, Когда пользователь выбирает строку в текущем табличном представлении, он перемещается к предыдущему контроллеру представления, используя self.navigationController?.popViewControllerAnimated(true)
, Всякий раз, когда это происходит, я получаю предупреждение -
"Попытка загрузить представление контроллера представления, пока он освобождается, недопустима и может привести к неопределенному поведению"
Чтобы избежать этого, я удаляю контроллер поиска из superview перед вызовом 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)
}
Я хочу понять, если это правильный подход, как указано выше в блоке else, или я должен сделать то же самое в:-
viewWillDisappear/viewDidDisappear
deinit{ if let superView = searchController.view.superview { superView.removeFromSuperview() } }
Какой из них правильный?
1 ответ
Я думаю, что первый - лучший вариант, который проверяет наличие активности перед удалением его из суперпредставления.