【问题标题】:Update project to iOS9 with XCode7 beta 4使用 XCode7 beta 4 将项目更新到 iOS9
【发布时间】:2015-10-15 05:30:56
【问题描述】:

我刚刚尝试使用新的 XCode7 beta4 运行我的项目,但在运行模拟器后立即给了我这个异常:

Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:],/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3491.2.5/UIApplication.m:3173 

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Application windows are expected to have a root view controller at the end of application launch'

我读到设置主窗口的 rootViewVontroller 可能会出现问题,但我在 AppDelegate.m 文件中的代码是这个:

[self.tabBarController setViewControllers:tabViewControllers];

[self.tabBarController setCustomizableViewControllers:customizableControllers];

[self.window setRootViewController:self.tabBarController];

tabBarController 类是一个自定义的 UITabViewController。 我不在我的项目中使用任何 .xib 文件!有人知道我该如何继续吗?

提前致谢

【问题讨论】:

  • 您是否先运行转换并消除所有警告?它在 Xcode 6.x 上运行良好,对吧?
  • “转化”是什么意思?我做了“更新到 raccomended 设置”,但我没有摆脱警告.. 但真的是愚蠢的警告,比如 (- (NSUInteger)supportedInterfaceOrientations 要更新到 - (UIInterfaceOrientationMask)supportedInterfaceOrientations)。你有什么想法可以成为@rholmes 吗?
  • 检查答案的更新。特别是,您是否尝试过 (1) 在 Xcode 7 (2) 中使用源代码控制差异来定位以前的 iOS (8.x) 以查看是否有任何无意更改。

标签: ios ios9 xcode7-beta4


【解决方案1】:

Xcode 7.0 出现问题。解决方法是在您的main.m 文件中替换此代码。

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

【讨论】:

    【解决方案2】:

    在 [self.window makeKeyAndVisible] 之后设置你的 self.window.rootRootController 可能会解决这个问题。

    这对我有用

    【讨论】:

      【解决方案3】:

      几乎所有东西都有同样的问题,来自 PowerVR 的示例代码,有时甚至是来自 Apple 的示例代码。

      我相信这是一个 iOS 9 问题(看起来 9 在这一点上很严格)。为了符合 iOS 9,必须在应用程序启动完成之前的某个时间点调用 setRootViewController。

      为了继续,尤其是使用旧代码,我下载了 iOS 8.4 和 iOS 8.1 模拟器。使用完全相同的代码定位它们会产生一个正常运行的项目,就像使用旧 Xcode 构建一样。

      设备也会出现类似的结果;在 iOS 9 之前的操作系统上定位设备会导致正常运行(尽管控制台确实显示了有关根视图控制器的投诉(说应用程序 Windows 应具有根视图控制器)),然后应用程序运行。

      这似乎是一些已弃用的设计要求——在早期版本中似乎已经警告过在没有根视图控制器的情况下运行代码的“允许”,但从 iOS 9 开始,这似乎是正式要求。

      有些代码没有这样的规定,因此,例如,在 SDK 3.5 的 PowerVR 示例代码(最近的 - 2015 年 9 月 12 日的最高版本)中,必须创建某种视图控制器(他们的代码没有'似乎没有)。

      【讨论】:

        【解决方案4】:

        首先,尝试正常的步骤以确保一致性:

        • 清理项目
        • 清除您正在使用的模拟器中的所有数据

        接下来,问自己以下问题:

        1. 在之前版本的Xcode中运行成功了吗?
        2. 除了新 Xcode 的必要转换之外,您是否更改了任何其他内容? (使用版本控制差异)。
        3. 是否已解决(或至少理解)所有警告? (我会确保所有这些都已修复)。
        4. 您的目标 SDK/设备是否发生了变化? (针对之前的 iOS 版本再试一次,看看是否能解决问题)。

        使用版本控制系统的diff 功能可以帮助解决问题 1 和 4。这可以帮助检测意外更改,例如拼写错误或删除界面构建器元素。

        警告是相关的,因为可能存在您未获悉的 SDK 更改。确保您仍然针对相同的 SDK 可以减少这方面的不确定性。

        可能导致此类错误的一些更改是:

        【讨论】:

        • 我做到了,我清理了项目,清除了模拟器中的数据,但仍然报错。该项目在以前版本的 XCode 中成功运行,我无法理解我可以做更多的事情来找出我可以做的改变以使其再次运行。请帮忙
        • 在你的故事板上做一个差异。确保在界面生成器中仍然设置了根视图控制器。
        • 我没有 xib、storyboard,也没有界面生成器。抱歉:(我真的不知道此时会发生什么。
        • 只是为了澄清-您上一次成功的 Xcode / iOS 版本是什么?可能会缩小可能性......
        • 我使用的最新 XCode 是 6.4,最小目标是 7.0。这不是一个旧项目,但我总是拒绝使用任何界面构建器,我编写了所有代码。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多