为了账号安全,请及时绑定邮箱和手机立即绑定

使用Xcode 7,iOS 9运行项目时,“在应用程序启动结束时,应用程序窗口应具有根视图控制器”

使用Xcode 7,iOS 9运行项目时,“在应用程序启动结束时,应用程序窗口应具有根视图控制器”

慕田峪4524236 2019-11-13 14:37:57
跑后功能- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions发生崩溃: Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit- *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', `enter code here`reason: 'Application windows are expected to have a root view controller at the end of application launch'*** First throw call stack:(    0   CoreFoundation                      0x0000000109377885 __exceptionPreprocess + 165    1   libobjc.A.dylib                     0x0000000108df0df1 objc_exception_throw + 48    2   CoreFoundation                      0x00000001093776ea +[NSException raise:format:arguments:] + 106    3   Foundation                          0x0000000108a42bb1 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198    4   UIKit                               0x000000010760e350 -[UIApplication _runWithMainScene:transitionContext:completion:] + 2875    5   UIKit                               0x000000010760b73f -[UIApplication workspaceDidEndTransaction:] + 188    6   FrontBoardServices                  0x000000010b87fd7b FrontBoardServices + 163195    7   FrontBoardServices                  0x000000010b880118 FrontBoardServices + 164120    8   CoreFoundation                      0x00000001092a20f1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17    9   CoreFoundation                      0x0000000109297eac __CFRunLoopDoSources0 + 556    10  CoreFoundation                      0x0000000109297363 __CFRunLoopRun + 867    11  CoreFoundation                      0x0000000109296d78 CFRunLoopRunSpecific + 488)libc++abi.dylib: terminating with uncaught exception of type NSException该项目是一个旧项目,我该怎么做才能使其在Xcode 7和iOS 9中构建并运行?
查看完整描述

4 回答

?
杨魅力

TA贡献1811条经验 获得超5个赞

如果您已经在应用程序委托中设置了self.window的rootViewController,并且在运行时仍收到此错误,则您的UIApplication中可能有多个窗口,其中一个窗口可能没有与rootViewController相关联。您可以循环浏览应用程序窗口,并将空的viewController与其rootViewController关联,以解决您遇到的错误。


这是一个循环遍历应用程序窗口的代码,如果缺少窗口,则将一个空的ViewController与rootViewController关联。


NSArray *windows = [[UIApplication sharedApplication] windows];

for(UIWindow *window in windows) {

    NSLog(@"window: %@",window.description);

    if(window.rootViewController == nil){

        UIViewController* vc = [[UIViewController alloc]initWithNibName:nil bundle:nil];

        window.rootViewController = vc;

    }

}

更新:显然有一个专门用于状态栏的窗口,通常会导致此问题。上面的代码应解决此错误。


查看完整回答
反对 回复 2019-11-13
?
墨色风雨

TA贡献1853条经验 获得超6个赞

XCODE 7要求所有Windows必须具有rootViewController您可以使用easy:


UIViewController* vc = [[UIViewController alloc]initWithNibName:nil bundle:nil];

self.window.rootViewController = vc;

如果您只需要使用UIWindow(对于任何教程的简单示例-Xcode 7之前的版本),则效果很好!


查看完整回答
反对 回复 2019-11-13
?
莫回无

TA贡献1865条经验 获得超7个赞

从iOS 9.1(?)或Xcode 7.1 开始,在离开该方法之前,任何UIWindow实例化的实例都 application(_:didFinishLaunchingWithOptions:)需要具有一个rootViewControllerset。


以前,rootViewController在该方法期间仅主窗口具有一个集就足够了。现在,任何UIWindow实例都需要具有有效的rootViewController属性。


如果您使用此代码UIWindow以及UIWindow在此期间尝试初始化新实例的任何其他第三方库(例如状态栏消息覆盖等),则可能是您自己的代码。


注意:如果未rootViewControler在主窗口中设置或情节提要板设置不正确,也会收到相同的错误。提及这一点作为旁注,因为这些案例非常明显且易于解决。


查看完整回答
反对 回复 2019-11-13
  • 4 回答
  • 0 关注
  • 679 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信