“无法在iPhone中加载NIB”错误在iPhone上但在模拟器上没有

时间:2012-03-02 04:51:00

标签: iphone objective-c

直到昨天,我的iPhone上有一个完美的应用程序。我昨天做了一些调整,现在应用程序可以在我的模拟器上运行,但不能在iPhone上运行。我收到的错误消息就在“applicationDidFinishLaunching”完成之后。

错误是: 'NSInternalInconsistencyException',原因:'无法在bundle中加载NIB:'NSBundle ....> (已加载)'名称为'RootViewController''“

奇怪的是,我没有任何名为RootViewController的xib文件。我在一个月前将我的名字改名为CategoryViewController,直到昨天这个工作都很好。我在每个viewControllers中验证了没有对“RootViewController”的引用。

我用“CTRL + shift + F”“RootViewController”搜索,我的项目中没有提到这个文件。

我正在做的调整与目标info.plist有关,我只添加了Application支持iTunes文件共享选项。这是我的info.plist,以防我搞砸了:

info.plist

我昨天也第一次跑“清洁”。

我验证了我的MainWindow.xib文件具有它应该具有的所有连接,并将其与我用作基础的原始示例项目进行比较。

我尝试将项目恢复到早期的快照,当我肯定它工作时,现在甚至不起作用。看来我的iPhone套装已经腐败了。但即使我从iPhone上删除了应用程序并重试,它也会做同样的事情。

我该如何调试?我花了10个小时试图解决这个问题,真的需要一些帮助。

2 个答案:

答案 0 :(得分:0)

Xcode模板创建一个Info.plist文件,指定主nib文件。

- 默认的笔尖名称是“MainWindow” - 该nib文件的默认版本包含一个引用名为“RootViewController”的视图的导航控制器。

但是,每个都可以有iPhone或iPad的变体。这些文件最后添加了〜iphone或~ipad。他们的系统将通过后缀自动选择变体。

你可能因为这个原因而尝试加载RootViewController而获得了一个不同的nib文件。

此外,如果您的nib中有一个引用RootViewController的视图或视图控制器,操作系统将尝试加载它。 (它一旦打开就会实例化nib文件中的所有内容。)

答案 1 :(得分:0)

通过重构并将我的第一个viewController重命名回RootViewController解决了这个问题。故事的寓意是不要改变RootViewController的名称。内置的引用不容易更改。没有必要使用不同的名称。一旦我这样做,一切都恢复了。