ios - 启动后立即添加 View 时出现 "Application windows are expected to have a root view controller"消息,仅限 iOS 9

标签 ios uiviewcontroller ios9 uiapplicationdelegate

我的应用程序在启动时发送一个请求,并在成功时向用户显示一条简短的消息,通过 MTStatusBarOverlay .不幸的是,我当前的实现似乎与 iOS 9 的 View 生命周期范例相冲突。我收到消息

Application windows are expected to have a root view controller at the end of application launch



并且应用程序崩溃。该应用程序在 iOS 7 和 8 上运行良好。

通过在线搜索,在为应用程序的 UIWindow 建立根 View Controller 之前尝试将消息 View 添加到 View 层次结构时,似乎可能会发生这种情况。 ,但这里似乎并非如此,请参见下文。

这是 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 有何不同?

最佳答案

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

我能够通过在使用覆盖层之前实例化和分配一个虚拟 Controller 来解决这个问题,如下所示:

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

关于ios - 启动后立即添加 View 时出现 "Application windows are expected to have a root view controller"消息,仅限 iOS 9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33792470/

相关文章:

ios - 在Xcode7.0中手动安装模拟器SDK 8.0

ios - 如何获取 UIMoreListController(私有(private)框架类)的 subview Controller ?

ios - iOS9 MFMailComposeViewController 的 NavigationBar 中的自定义字体?

ios - 彼此相切的圆。我如何检测哪个圆被点击了?

ios - 在 iPad 上的 iOS SDK 8.4 中的 ARC 下过度释放 MPMoviePlayerController

iphone - ios Kill 应用程序问题

ios - 在 ios 中的共享扩展中将视频转换为 NSData

ios - 在 UIViewController 中显示 NavigationController

IOS7/IOS8 在 View Controller 中只允许纵向

swift - 从变量/常量在 Storyboard中设置 UIColor