最近遇到一个很奇怪 的问题 就是app停在启动页就崩溃掉,并且报报Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3600.9.1/UIApplication.m:3677 ===>Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Application windows are expected to have a root view controller at the end of application launch'
大概崩溃原因是没有设置程序需要的rootViewController ,但是 AppDelegate 中确实是设置了,而且- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [ UIColor whiteColor];
if (UserModel.token.length) {
UserModel.userName = [[NSUserDefaults standardUserDefaults] valueForKey:@"userName"];
MainViewController *mainVC = [[ MainViewController alloc]init];
self.window.rootViewController = mainVC;
}else{
LoginVC *loginVC = [[ LoginVC alloc]init];
self.window.rootViewController = loginVC;
}
[self.window makeKeyAndVisible];
return Yes;
}
在网上搜了好多资料 发现都是关于rootviewcontroller的设置的问题,但是始终没有找到根源,还有的说是代码太多,didFinishLaunchingWithOptions
方法走完了rootViewcontroller还没设置成功,但是能打印出rootViewController的。
后来终于找到原因,在用户第一次启动时需要弹框,用到了一个自己写的一个弹框类,在显示弹框的时候把 自定义的View 添加到了一个新的window对象上面,并把该window设置为要显示的window,makeKeyAndVisible;造成启动时找不到rootViewController。
注意:不要在程序启动的时候设置新的window
为后续遇到此类问题的朋友提供一种解决问题的思路,也请对该问题有独到见解的朋友一同探讨。