使用XCode7 beta 4将项目更新到iOS9

时间:2015-07-24 13:49:24

标签: ios ios9 xcode7-beta4

我只是尝试使用新的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文件!有人知道我该怎么办吗?

提前致谢

4 个答案:

答案 0 :(得分:1)

几乎所有内容都存在同样的问题,示例代码形式为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年12月9日的最高版本),必须创建某种视图控制器(它们的代码不会#39; t似乎有一个)。

答案 1 :(得分:1)

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

这对我有用

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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

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

  1. 它是否在之前版本的Xcode中成功运行?
  2. 除了新Xcode的必要转换之外,您是否更改了其他内容? (使用版本控制差异)。
  3. 是否所有警告都已得到解决(或至少已被理解)? (我确保所有这些都已修好)。
  4. 您的目标SDK /设备是否已更改? (再次尝试针对之前的iOS版本,看看是否修复了它。)
  5. 使用版本控制系统的diff功能可以帮助解决问题1和4.这有助于检测无意中的更改,例如拼写错误或删除界面构建器元素。

    警告是相关的,因为您可能无法通知SDK更改。确保您仍然使用相同的SDK可以减少这方面的不确定性。

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