首页 文章

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

提问于
浏览
11

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

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

您可能会想“按照它说的那样,将文件所有者连接到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>

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

我设法混淆了xcode吗?

12 回答

  • 0

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

  • 0

    我的解决方案有点不同 .

    • 单击界面构建器中的xib

    • 选择左侧的文件所有者

    • 打开文件's Owner'的连接检查器

    • 如果视图属性不是't yet wired, control-drag it to the view icon (under the file'的所有者和第一响应者图标) .

  • 1

    我也有这个问题,但必须以不同的方式解决它 . 基本上,我有一个视图控制器名称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中一样 . 它查找一个笔尖名称与视图控制器类名称匹配的文件 . 例如,如果类名是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不会自动为您执行此操作,因此我们需要手动删除旧笔尖 .

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

  • 0

    我最近解决了这个问题 . 确保在按照此处给出的步骤(以防万一)之前备份项目 . 这些步骤解决了我的问题

    • 退出Xcode

    • 导航到位于 .xcodeproj/project.xcworkspace/xcuserdata/<username>.xcuserdataUserInterfaceState.xcuserstate 并删除该文件 .

    • 重新打开Xcode . Xcode将创建一个新的 UserInterfaceState.xcuserstate ,它将是干净的 .

  • 4

    在我的情况下,我根本没有使用xib . 我需要从Build Phases> Compile Sources中删除.m文件并将其添加回来 .

  • 2

    鉴于你之前引用它,听起来像xcode还没有得知它不再存在 . 从产品菜单中选择“清洁”,然后选择“构建”,希望这将超过旧的参考您 .

  • 0

    面对同样的问题,不得不在代码中更改视图的名称:

    MyViewController *controller = [[MyViewController alloc] initWithNibName:@"WrongViewName" bundle:nil];
    

    MyViewController *controller = [[MyViewController alloc] initWithNibName:@"RightViewName" bundle:nil];
    
  • 5

    我有多个视图,偶然(我不知道这是怎么发生的)但我的后台视图没有文件所有者,因此对于将来遇到此问题的其他人,请确保所有视图都有文件所有者 .

  • 19

    我得到了相同的错误,然后检查接口构建器中的类名,看到我在自定义类属性中键入了视图控制器类名 .

  • 0

    当传递nil到_1339240时,UIViewController搜索与控制器同名的nib . 检查传递给初始化程序的文件名是否正确且存在!

    例如:(例如 [[CCVisitorsController alloc] initWithNibName:nil bundle:nil] 然后UIViewController尝试加载名称为 CCVisitorsController 的nib作为默认值 .

    如果该文件不存在,则抛出您提到的错误 .

  • 0

    我有这个问题,因为我做的事情很糟糕

    • (id)initWithCoder :( NSCoder *)编码器

    NIB加载 .

  • 0

    在我的情况下,这个错误是由愚蠢的错误产生的 - 我删除_view view
    dumb mistake

相关问题