我有一个可搜索的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上。
任何帮助表示感谢。
答案 0 :(得分:1)
好的,我发现了问题,可能对其他人有帮助。
我在didSelectRowAtIndexPath方法中有以下内容:
self.resultSearchController.active = false
所以,当我通过选择行来解雇视图时,我试图停用显然涉及动画/演示的UISearchController
删除此行后,警告已停止。
答案 1 :(得分:0)
您正在尝试同时推送和弹出相同的ViewController。选择项目时你想做什么?