Ios 由于另一个最近被解除,UIViewController未显示
我有一个视图控制器Ios 由于另一个最近被解除,UIViewController未显示,ios,cocoa-touch,Ios,Cocoa Touch,我有一个视图控制器MainViewController,它(通过按钮)允许用户以模式显示/取消另一个InventoryViewController 然后,第三个视图控制器CallViewcontroller以特定的时间间隔从MainViewController以编程方式呈现。在此之前,InventoryViewController将被解除 如果从不显示InventoryViewController,则显示CallViewController时不会出现任何问题 如果启动CallViewContro
MainViewController
,它(通过按钮)允许用户以模式显示/取消另一个InventoryViewController
然后,第三个视图控制器CallViewcontroller
以特定的时间间隔从MainViewController
以编程方式呈现。在此之前,InventoryViewController
将被解除
如果从不显示InventoryViewController
,则显示CallViewController
时不会出现任何问题
如果启动CallViewController
时,InventoryViewController
可见/存在,则似乎也没有任何问题
但是,如果出现InventoryViewController
,则用户可以在任何时候手动解除,当出现CallViewController
时,应用程序部分冻结,控制台抛出错误-
Warning: Attempt to present <CallViewController: 0x17e31bb0> on <MainViewController: 0x18d3fc00> whose view is not in the window hierarchy!
从MainViewController
内的按钮中关闭InventoryViewController
的代码:
[self performSegueWithIdentifier:@"segueToInventoryView" sender:self];
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
在显示CallViewController
之前,从MainViewController
以编程方式关闭InventoryViewController
的代码:
[self dismissViewControllerAnimated:NO completion:nil];
(我还使用计时器延迟显示CallViewController
的方法,以确保InventoryViewController
已正确关闭)
我猜错误是说我不能从MainViewController
显示模态,因为它不在堆栈的顶部,这表明InventoryViewController
没有被正确地排除
最初我的代码是为iOS7编写的,现在BaseSDK是iOS9(通常一年后我会回到这个项目和iOS编程)。据我所知,这个问题以前没有发生过。那么这是由iOS8/9带来的变化引起的,还是这里发生了其他事情
感谢您的帮助。找到了解决方案,我在
MainViewController
中设置了一个标志,用于检查InventoryViewController
是否已被解除,但设置不正确。这导致调用了两次[self dismissionviewcontrolleranimated:NO completion:nil]
,第二次调用实际上是通过将调用发送给它的父对象来解除MainViewController
因此,在呈现和呈现视图控制器上都可以调用[self-dismissViewControllerAnimated:NO completion:nil]这一事实可能值得注意
上面概述的代码在iOS8/9中似乎运行良好