0

searchController 在 viewDidLoad()TableViewController 中声明为searchController = UISearchController(searchResultsController: nil). 当用户在当前表视图中选择一行时,它使用 . 导航到上一个视图控制器self.navigationController?.popViewControllerAnimated(true)。每当发生这种情况时,我都会收到警告-

“在解除分配时尝试加载视图控制器的视图是不允许的,并且可能导致未定义的行为”

为了避免这种情况,我在调用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() } }

哪一项是正确的做法?

4

1 回答 1

0

我认为第一个是更好的选择,可以在将其从超级视图中删除之前检查是否处于活动状态。

于 2016-04-06T08:10:42.543 回答