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 块中的正确方法,或者我应该在以下范围内做同样的事情:-
viewWillDisappear/viewDidDisappear
deinit{ if let superView = searchController.view.superview { superView.removeFromSuperview() } }
哪一项是正确的做法?