我只是尝试使用新的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文件!有人知道我该怎么办吗?
提前致谢
答案 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)
首先,尝试正常步骤以确保一致性:
接下来,问自己以下问题:
使用版本控制系统的diff
功能可以帮助解决问题1和4.这有助于检测无意中的更改,例如拼写错误或删除界面构建器元素。
警告是相关的,因为您可能无法通知SDK更改。确保您仍然使用相同的SDK可以减少这方面的不确定性。
可能导致此类错误的一些更改包括: