切换rootViewController后,模态viewcontroller处于limbo状态

时间:2013-05-25 14:40:49

标签: ios modalviewcontroller presentmodalviewcontroller

我想我在IOS SDK中发现了一个错误,但我不知道如何在没有这个问题的情况下解决这个问题 大量修改我的代码。

问题? 如果我提出模态视图控制器,则用户将应用程序移动到背景状态, 当用户回到应用程序时,我将rootViewController切换到另一个视图 控制器,我在那里验证用户会话并制作更多逻辑。 完成此步骤后,我将替换原始的rootViewController。 问题是rootViewController提供的modalViewController, 隐藏/不显示。当我试图解雇它时,它给了我一个错误 我试图忽略一个不可见的观点。

当我尝试再次呈现它(或者只是另一个视图控制器)时,它会让我误以为我在呈现另一个视图控制器时尝试呈现视图控制器。

所以,我不能忽略模态视图控制器,我不能提出一个新的。

总结一下,似乎如果你提出一个modalviewcontroller,而不是改变你的 rootViewController到另一个viewcontroller,并恢复原来的rootViewController - > 所呈现的任何模态都处于一种不稳定状态。

任何人都可以解决这个问题吗?除了“不要替换你的rootviewcontroller”之外的任何解决方案吗?

非常感谢

2 个答案:

答案 0 :(得分:1)

为什么要寻找除“不要替换rootviewcontroller”之外的解决方案。这是正确的指导。它不是iOS中的错误。通常,您不应该替换根视图控制器。

听起来你真正想要的是第三个视图控制器作为窗口的根视图控制器,并将主视图和入口视图控制器作为子视图进行管理。尝试一下,并使用View Controllers,如果遇到麻烦,我们可以尝试提供帮助。

视图控制器旨在以非常特定的方式工作,如果您滥用它们,您将体验到各种不良影响。有时你会先放下它,放心吧,它会回来咬你。

View Controller Programming Guide

答案 1 :(得分:1)

假设你想保留原始方法,你在两个控制器之间交换,而不是使用第三个来管理它们,你可以在从后台返回时,在交换根之前关闭呈现的视图控制器查看控制器。

例如,在应用代理的-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];
    }

这将消除导致错误消息无法显示新视图控制器的情况,因为已经呈现了一个。