我的应用程序在启动时发送一个请求,并在成功时向用户显示一条简短的消息,通过 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 有何不同?
最佳答案
MTStatusBarOverlay
是 UIWindow
的子类,因此在应用程序启动期间实例化一个会添加 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/