在启动后立即添加视图时,“应用程序窗口应具有根视图控制器”消息,仅限iOS 9

时间:2015-11-18 23:23:51

标签: ios uiviewcontroller ios9 uiapplicationdelegate

我的应用在启动时发送请求,并在成功时通过MTStatusBarOverlay向用户显示简短消息。不幸的是,我目前的实现似乎与iOS 9的视图生命周期范例相悖。我收到了消息

  

应用程序窗口应在应用程序启动结束时具有根视图控制器

并且应用程序崩溃了。该应用程序适用于iOS 7& 8。

通过在线搜索,在为应用程序UIWindow建立根视图控制器之前尝试将消息视图添加到视图层次结构时,似乎可能会出现这种情况,但这似乎不是案例见下文。

以下是UIApplicationDelegate实施的摘录:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [...]

    self.window.rootViewController = [[MyViewController alloc] init];

    [...]
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [MyDataManager sendRequestWithCompletion:^{
        // Displays a message with MTStatusBarOverlay
        [self showSuccessOverlay];
    }];
}
application:didFinishLaunchingWithOptions:之前调用

applicationDidBecomeActive:,因此似乎永远不会出现rootViewController被建立的问题。

为什么会这样? iOS 9有什么不同导致应用程序崩溃?

1 个答案:

答案 0 :(得分:0)

MTStatusBarOverlayUIWindow的子类,因此在应用启动期间实例化一个会将UIWindow添加到iOS在启动完成时检查已填充的rootViewController的列表中。 / p>

我能够通过在使用叠加层之前实例化并指定一个虚拟控制器来解决这个问题,如下所示:

[MTStatusBarOverlay sharedInstance].rootViewController = [UIViewController new];
[[MTStatusBarOverlay sharedInstance] postMessage:@"Message"];