2012-10-05 73 views
5

我开始使用NIB文件处理视图,并决定从我的项目中删除它以编程方式构建它。在我的任何代码中都没有提到应该调用NIB文件,并且.XIB不存在于任何应用程序目录中的任何位置。这是从调试控制台向我抛出的确切错误。XCode试图加载我从项目中删除的NIB文件

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason:  
'-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "GESplitMainViewController" 
nib but the view outlet was not set.' 

我不明白为什么Xcode仍然试图加载NIB。

+0

什么是你的代码在initWithNibName:bundle:? – Pfitz

+0

你可能会告诉它在代码中加载xib文件,或者从故事板或类似的东西中加载。请向我们展示您的代码或尝试在项目中搜索NIB名称。 –

+0

我没有提到代码中任何地方的NIB文件。 –

回答

11

首先,默认为笔尖的initWithNibName:bundle搜索implementation捆绑如果您将nil作为第一个参数传递,那么它与视图控制器的类共享相同的名称,这就是您的应用程序试图加载它的原因。

找到它的原因可能是因为您曾经在项目中使用的.xib仍然包含在模拟器运行的软件包中。即使从项目中删除它们,Xcode也有在模拟器捆绑中保留已删除资源的习惯。

如果您从模拟器中删除应用程序,请清理Xcode项目并重新运行,它应该停止尝试加载笔尖。

虽然这是您的应用程序从笔尖加载的原因,但这不是它崩溃的原因。崩溃是因为您使用的旧.xib没有连接到视图控制器视图插座的视图。

+1

感谢有价值的信息:) –

+1

我也看到了这种行为,并且模拟器中的构建清理工作正常,但构建在野外时该怎么办?简单的更新似乎并不是从手机中删除已经失效的xib,即使它不再存在于捆绑中。有没有办法清除它?还是我必须永远活在永恒的存在?我当然不想告诉我的用户他们必须卸载并重新安装才能成功执行更新。 –

0

如果你还没有使用笔尖名字在任何地方申请,先删除应用程序,清理您的构建和测试,希望这能解决您的问题..