'NSInternalInconsistencyException',原因:' - [UIViewController _loadViewFromNibNamed:bundle:]加载了GameView笔尖,但未设置视图插座

Bem*_*mmu 11 iphone interface-builder xcode4

这与此处众多其他类似问题的情况不同.

*由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:' - [UIViewController _loadViewFromNibNamed:bundle:]加载了GameView笔尖,但未设置视图插座.

您可能会想"按照它说的那样,将文件所有者连接到IB中的视图!".但问题是,我甚至在项目中甚至在项目目录中都没有GameView.xib.

我的项目中有一个"GameViewController.m"和匹配的"GameViewController.xib".使用GameViewController会出现这个错误,但我不明白尝试加载"GameView.xib"的想法.它不应该使用"GameViewController.xib"吗?


如果我grep我的项目目录,我确实看到它引自"UserInterfaceState.xcuserstate".

<string>file://localhost/Users/bemmu/Dropbox/b2/iphone/ValleyStory/ValleyStory/GameView.xib</string>
Run Code Online (Sandbox Code Playgroud)

这个提到的文件不存在.我之前可能有一个带有该名称的文件,并重命名/删除它,但它没有被我在IB中看到的任何地方引用.

我设法混淆了xcode吗?

bbr*_*ame 19

我的解决方案有点不同.

  1. 单击界面构建器中的xib
  2. 选择左侧的文件所有者
  3. 打开文件所有者的连接检查器
  4. 如果视图属性尚未连线,请将其拖动到视图图标(在文件所有者和第一响应者图标下).


Cam*_*ert 5

检查您正在使用的任何nib文件(如MainWindow.xib).如果要从笔尖加载GameViewController,请检查它正在加载的文件(在检查器的信息选项卡下).确保它设置为"GameViewController"而不是"GameView".


rvi*_*007 5

我也有这个问题,但必须以不同的方式解决它.基本上,我有一个视图控制器名称MainViewController,它有一个名为MainViewController.xib的xib.这个笔尖的视图属性设置为文件所有者,它是MainViewController.

我还创建了一个MainView.xib,其中包含一个视图,该视图将以编程方式添加到MainViewController.xib中定义的视图及其视图中.它基本上封装了一个内部视图,该视图将位于MainViewController.xib的视图中,并且还将其文件所有者设置为MainViewController.

所以基本上,我希望MainViewController.xib作为MainViewController对象的nib加载,而在MainViewController中,稍后,我会添加MainView.xib指定的内部视图.

出现了几个问题:

1.)我在Apple文档中发现通过storyboard或nib加载视图控制器时:

"如果视图控制器类名以单词"Controller"结尾,就像在MyViewController中一样,它会查找名称与类名匹配的nib文件,而不是"Controller",如MyView.nib中所示.

它查找名称与视图控制器类名称匹配的nib文件.例如,如果类名是MyViewController,它会查找MyViewController.nib文件."

因此,如果您还有一个名为MainViewController的nib并且希望MainViewController.xib成为MainViewController的主要nib,则不能有一个名为MainView.xib的nib.

2.)即使您删除MainView.xib或将其重命名为其他内容(本例中为MainInternalView.xib),您必须删除/清除iOS模拟器,因为旧的nib文件(MainView.xib)仍将保留在应用程序中.重建/重新运行应用程序时,它不会覆盖整个应用程序包.

如果您不想重置内容设置(可能需要保留一些数据),请右键单击iOS模拟器文件夹中的应用程序,显示包内容,找到MainView.nib,然后将其删除.重建时Xcode不会自动为您执行此操作,因此我们需要手动删除旧笔尖.

总的来说,不要将nib命名为MainViewController和MainView,即具有相同前缀的nib.将MainView.xib调用为其他内容,例如MainInternalView.xib.