1

我只是尝试使用新的 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

4 回答 4

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 年 9 月 12 日的最高版本)中,必须创建某种视图控制器(他们的代码没有出现有一个)。

于 2015-09-12T17:27:04.097 回答
1

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

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
于 2015-09-28T09:25:49.867 回答
1

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

这对我有用

于 2015-09-22T13:48:03.413 回答
0

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

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

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

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

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

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

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

于 2015-07-24T15:10:46.407 回答