我有一个 View Controller MainViewController
哪个(通过按钮)允许用户展示/关闭另一个 InventoryViewController
模态的。
第三个 View Controller CallViewcontroller
然后从 MainViewController
以编程方式呈现在特定的时间间隔。在此之前,InventoryViewController
被解雇。
如果 InventoryViewController
从未出现,CallViewController
没有任何问题。
如果 InventoryViewController
在 CallViewController
时可见/存在已启动,似乎也没有任何问题。
但是如果 InventoryViewController
呈现然后由用户手动关闭,在任何时候,CallViewController
出现应用程序部分卡住并且控制台抛出错误 -
Warning: Attempt to present <CallViewController: 0x17e31bb0> on <MainViewController: 0x18d3fc00> whose view is not in the window hierarchy!
启动代码
InventoryViewController
来自 MainViewController
:[self performSegueWithIdentifier:@"segueToInventoryView" sender:self];
关闭代码
InventoryViewController
来自 MainViewController
内的按钮:[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
关闭代码
InventoryViewController
以编程方式来自 MainViewController
就在 CallViewController
之前被表达:[self dismissViewControllerAnimated:NO completion:nil];
(我还使用计时器来延迟显示
CallViewController
的方法,以确保 InventoryViewController
已正确关闭)我猜这个错误是说我不能从
MainViewController
中展示一个模态。因为它不在堆栈的顶部,这表明 InventoryViewController
没有被正确解雇。最初我的代码是为 iOS7 编写的,现在 BaseSDK 是 iOS9(我通常会在一年后返回这个项目和 iOS 编程)。据我所知,这个问题以前没有发生过。那么这是由 iOS8/9 带来的变化引起的,还是这里发生了其他事情?
任何帮助表示赞赏。
最佳答案
找到了解决方案,我在 MainViewController
中有一个标志用于检查 InventoryViewController
已被解雇,但设置不正确。这导致了[self dismissViewControllerAnimated:NO completion:nil]
被调用两次,第二次实际上是解雇 MainViewController
,通过将调用发送给它的 parent !
因此,可以在呈现和呈现的 View Controller 上调用 [self dismissViewControllerAnimated:NO completion:nil] 的事实可能需要注意。
上面列出的代码似乎在 iOS8/9 中运行良好
关于ios - UIViewController 由于另一个最近被解雇而没有被呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33678568/