UISearchController - 警告:尝试在演示文稿或解雇时从视图控制器中解除

时间:2016-03-21 06:08:48

标签: ios uitableview xcode7 uisearchcontroller

我有一个可搜索的tableview控制器(使用UISearchController和NSFetchedResultsController),它列出了各行的项目。

用户点击一行来选择该项目,该项目将展开的segue调用到上一个tableview。

当用户点击一行时,我希望将所选的FetchedResultsController对象发送回原始tableview控制器并填充原始tableview中的字段并关闭当前可搜索的tableview控制器。

当我点击某行选择 而不 搜索项目时,它可以正常工作而不会发出任何警告。

然而, 当我搜索 表时,然后从过滤后的项目中选择我出现以下警告:

警告:正在进行演示或解雇时尝试从视图控制器中解除!

unwind segue在故事板中从tableview单元连接到"退出"同一个tableview控制器上的图标。以下是展开segue的代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if segue.identifier == "myUnwindSegue" {

        let indexPath = tableView.indexPathForSelectedRow
        selectedAirfield = frc.objectAtIndexPath(indexPath!) as? Airfields
        self.navigationController?.popViewControllerAnimated(true)

    }
}

我也尝试过:

if !self.isBeingDismissed() {
    self.navigationController?.popViewControllerAnimated(true)
}

但这给了我同样的警告。

我也尝试过:

self.dismissViewControllerAnimated(true, completion: nil)

但是这只能让我回到当前的tableview并且不会让我回到上一个tableview控制器并给我以下警告:

popToViewController:transition:在发生现有转换或演示时调用;导航堆栈不会更新。

我也尝试将segue上的动画禁用到可搜索的tableview控制器,但这没有效果。

我也试过放置:

self.searchController?.loadViewIfNeeded()

在viewDidLoad中并尝试过:

 deinit{
    if let superView = resultSearchController.view.superview {
        superView.removeFromSuperview()
    }
 }

这些都无法解决问题。

重申一下,它只会在选择搜索结果时发生,并且在选择未过滤的tableview行时效果很好。

我在Xcode 7.2.1上。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:1)

好的,我发现了问题,可能对其他人有帮助。

我在didSelectRowAtIndexPath方法中有以下内容:

self.resultSearchController.active = false

所以,当我通过选择行来解雇视图时,我试图停用显然涉及动画/演示的UISearchController

删除此行后,警告已停止。

答案 1 :(得分:0)

您正在尝试同时推送和弹出相同的ViewController。选择项目时你想做什么?