如何在使用 popViewControllerAnimated(true) 导航出 UITableView 时修复 UISearchController 的警告

Posted

技术标签:

【中文标题】如何在使用 popViewControllerAnimated(true) 导航出 UITableView 时修复 UISearchController 的警告【英文标题】:How to fix a warning for UISearchController when navigating out of UITableView using popViewControllerAnimated(true) 【发布时间】:2016-04-06 07:40:37 【问题描述】:

searchController 在 TableViewController 的 viewDidLoad() 中声明为 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()

哪一个是正确的做法?

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于如何在使用 popViewControllerAnimated(true) 导航出 UITableView 时修复 UISearchController 的警告的主要内容,如果未能解决你的问题,请参考以下文章

如何在发布管道中使用输出变量

如何在Hive&Impala中使用UDF

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何在android中使用WCF服务?

如何使用 Java 在 selenium webdriver 中打开新选项卡,或者如何使用 selenium webdriver 使用动作类在 selenium 中按 ctrl + T [重复]