虽然正在进行现有的过渡或演示; 导航堆栈不会更新
我遇到过这个警告:
pushViewController:animated:在发生现有转换或演示时调用; 导航堆栈不会更新。
在尝试从UIAlertController
完成块调用navigationController?.popViewControllerAnimated(false)
。
此警告表示您正在尝试错误地使用UINavigationController
:
pushViewController:animated:在发生现有转换或演示时调用; 导航堆栈不会更新
您在评论中提到您正在尝试使用ViewController
navigationController?.popViewControllerAnimated(false)
UIAlertController
内部完成块。 因此,您正试图从错误的视图中展开, UIAlertController
不是UINavigationController
堆栈的一部分 。
首先尝试关闭UIAlertController
,然后弹出当前的ViewController
。 换句话说,从completion
块中删除pop
并将其放在OK
块中。 或者在警报前使用unwind
segue。
另一种可能性是,你在storyboard
有一个未使用或相同的副本。 因此,如果由storyboard
按钮触发unwinding
操作,请选择此按钮并检查connectivity inspector
并删除不需要的连接。
例如:在我的情况下,标记的红色x是不必要的。
我使用DispatchQueue.main.async解决了这个问题。在UIAlertController的Transition完成后调用popviewcontroller
1)显示警报
2)延迟后调用pop viewcontroller
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { self.navigationController?.popToRootViewController(animated: true) }
这不是最好的方法,但它有效!
我正在使用dispatch_async 及其工作 。 我试图导航回来但没有奏效, 因为导航堆栈不会更新。
let destVC = self.storyboard?.instantiateViewControllerWithIdentifier("HomeViewController") as! HomeViewController self.presentViewController(destVC, animated: true, completion: {() -> Void in dispatch_async(dispatch_get_main_queue(), {() -> Void in self.navigationController?.popViewControllerAnimated(true)! }) })
我的解决方案是调用dismissViewControllerAnimated:首先然后从导航堆栈中弹出viewcontroller这对我有用: –
[self dismissViewControllerAnimated:false completion:nil]; [myNavigationControllerInstance popToRootViewControllerAnimated:true]; // myNavigationControllerInstance = Your Navigation Controller Instance