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

使用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 回答

?
PIPIONE

从您的错误消息中:


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


这个“旧”项目几岁了?如果已经超过几年,您是否还有:


[window addSubview:viewController.view];

您应该改为:


[window setRootViewController:viewController];


查看完整回答
反对 回复 2019-11-13
?
杨魅力

如果您已经在应用程序委托中设置了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
?
墨色风雨

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


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

self.window.rootViewController = vc;

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


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

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


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


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


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


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

添加回答

回复

举报

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