【问题标题】:modelviewcontroller in limbo state after swiching rootViewControllers切换 rootViewController 后模态视图控制器处于边缘状态
【发布时间】:2013-05-25 14:40:49
【问题描述】:

我想我在 IOS SDK 中发现了一个错误,但我不确定如何在没有 大量修改我的代码。

问题? 如果我呈现模态视图控制器,则用户将应用程序移动到后台状态, 当用户回到应用程序时,我将 rootViewController 切换到不同的视图 控制器,我在其中验证用户会话并制作更多逻辑。 这一步完成后,我替换了我原来的rootViewController。 问题是由 rootViewController 呈现的 modalViewController, 隐藏/不显示。当我试图解雇它时,它给了我一个错误 我正在尝试消除它不可见的视图。

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

所以,我不能关闭模态视图控制器,也不能呈现一个新的。

总而言之,似乎如果您提供一个 modalviewcontroller,而不是更改您的 rootViewController 到另一个viewcontroller,并恢复原来的rootViewController -> 任何出现的模态都处于一种不确定状态。

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

非常感谢

【问题讨论】:

  • 这个根视图控制器的切换你是怎么做的?您是否保留了指向显示模态的指针?从您的描述中听起来,当您再次切换到该控制器时,您将返回到该控制器的同一实例。
  • 是的,当进入后台时,我存储我的“MainViewController”的引用,并将“EntranceViewController”作为 rootViewController。在我完成入口视图控制器后,我将“MainViewController”恢复为 rootViewController,但不幸的是,呈现的模态视图控制器是不可见的,但仍然存在于逻辑中
  • 当应用程序进入后台时,您是否有不想关闭该模态视图控制器的原因?这似乎是最简单的解决方案。

标签: ios modalviewcontroller presentmodalviewcontroller


【解决方案1】:

您为什么要寻找“不要替换您的 rootviewcontroller”以外的解决方案。这才是正确的引导。这不是 iOS 中的错误。一般来说,你不应该替换根视图控制器。

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

视图控制器旨在以非常特定的方式工作,如果您滥用它们,您会遇到各种不良影响。有时你一开始会侥幸逃脱,但请放心,以后它会回来咬你的。

View Controller Programming Guide

【讨论】:

    【解决方案2】:

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

    例如,在您的应用委托的 -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];
        }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多