我想我在IOS SDK中发现了一个bug,但我不确定如何在不大量修改代码的情况下克服这个问题。
问题出在哪里?如果我呈现模式视图控制器,然后用户将应用程序移动到后台状态,当用户返回到应用程序时,我将rootViewController切换到不同的视图控制器,在那里我验证用户会话并进行一些更多的逻辑。在这一步完成之后,我替换了我原来的rootViewController。问题是rootViewController显示的modalViewController是隐藏的/不显示的。当我试图忽略它时,它会给我一个错误,那就是我试图忽略它不可见的视图。
当我试图再次呈现它(或者仅仅是另一个视图控制器)时,我错误地认为当另一个视图控制器出现时,我会尝试呈现视图控制器。
因此,我不能忽略模式视图控制器,也不能提供一个新的。
总而言之,似乎如果你呈现一个模态视图控制器,然后将你的rootViewController更改为另一个视图控制器,并恢复原始的rootViewController ->任何处于边缘状态的模态。
有谁能弄明白这一点?除了“不要替换你的rootviewcontroller”之外,还有其他的解决方案吗?
非常感谢
发布于 2013-05-25 23:13:24
除了“不要替换你的rootviewcontroller”之外,你为什么还在寻找解决方案呢?这是正确的指导。这不是iOS中的错误。通常,您不应该替换根视图控制器。
听起来您真正想要的是第三个视图控制器,它充当窗口的根视图控制器,并将主视图控制器和入口视图控制器作为子控制器进行管理。尝试一下,也可以使用视图控制器,如果你遇到麻烦,我们可以尝试帮助你。
视图控制器被设计成以非常特殊的方式工作,如果你误用它们,你将会遇到各种各样的不良效果。有时你一开始会逃脱惩罚,放心吧,一直到最后,它都会回来咬你。
View Controller Programming Guide
发布于 2013-07-22 00:11:13
假设您希望保留原来的方法,即在两个控制器之间进行交换,而不是使用第三个控制器来管理它们,那么当您从后台返回时,您可以在换出根视图控制器之前取消呈现的视图控制器。
例如,在应用程序委派的-applicationWillEnterForeground:中:
if (self.window.rootViewController.presentedViewController != nil) {
// do any tear-down relating to the modally presented view controller
// Now dismiss it.
[self.window.rootViewController dismissViewControllerAnimated:NO
completion:nil];
}这将消除导致无法显示新的View Controller错误消息的情况,因为已经显示了一个新的View Controller。
https://stackoverflow.com/questions/16750608
复制相似问题