Как исправить предупреждение для 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, или я должен сделать то же самое в:-

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

Какой из них правильный?

1 ответ

Я думаю, что первый - лучший вариант, который проверяет наличие активности перед удалением его из суперпредставления.

Другие вопросы по тегам