【问题标题】:'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the GameView nib but the view outlet was not set'NSInternalInconsistencyException',原因:'-[UIViewController _loadViewFromNibNamed:bundle:] 加载了 GameView 笔尖,但未设置视图出口
【发布时间】:2011-07-24 18:07:39
【问题描述】:

这与这里的许多其他类似问题不同。

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

您可能在想“照它说的做,将文件的所有者连接到 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 弄糊涂了?

【问题讨论】:

    标签: iphone interface-builder xcode4


    【解决方案1】:

    在我的情况下,这个错误是由愚蠢的错误产生的 - 我删除了 _view 视图

    【讨论】:

      【解决方案2】:

      我也遇到了这个问题,但必须以不同的方式解决。基本上,我有一个名为 MainViewController 的视图控制器,它有一个名为 MainViewController.xib 的 xib。这个 nib 的 view 属性设置为 File Owner,它是 MainViewController。

      我还制作了一个 MainView.xib,其中包含一个视图,该视图将以编程方式添加到 MainViewController.xib 中定义的视图及其视图中。它基本上封装了一个内部视图,该视图将位于 MainViewController.xib 的视图中,并将其 File Owner 设置为 MainViewController。

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

      出现了几个问题:

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

      "如果视图控制器类名以单词“Controller”结尾,则为 在 MyViewController 中,它会查找名称与 不带“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 Simulator 文件夹中右键单击你的应用程序,显示包内容,找到 MainView.nib,然后删除它。 Xcode 不会在你重建时自动为你做这件事,所以我们需要手动移除旧的 nib。

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

      【讨论】:

        【解决方案3】:

        就我而言,我根本没有使用 xib。我需要从 Build Phases > Compile Sources 中删除 .m 文件并将其添加回来。

        【讨论】:

          【解决方案4】:

          我遇到了这个问题,因为我在做坏事

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

          NIB 加载的内容。

          【讨论】:

            【解决方案5】:

            UIViewController 在将 nil 传递给 initWithNibNamed:bundle: 时搜索与控制器同名的 nib 检查传递给初始化程序的文件名是否正确且存在!

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

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

            【讨论】:

              【解决方案6】:

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

              1. 退出 Xcode
              2. 导航到位于.xcodeproj/project.xcworkspace/xcuserdata/&lt;username&gt;.xcuserdataUserInterfaceState.xcuserstate 并删除该文件。
              3. 重新打开 Xcode。 Xcode 将创建一个新的UserInterfaceState.xcuserstate,它将是干净的。

              【讨论】:

                【解决方案7】:

                我遇到了同样的错误,然后从界面生成器中检查类名,发现我在自定义类属性中输入了视图控制器类名。

                【讨论】:

                  【解决方案8】:

                  我有多个视图,但偶然(我不知道这是怎么发生的)但我的背景视图没有文件所有者,因此对于将来遇到此问题的任何其他人,请确保您的所有视图有一个文件所有者。

                  【讨论】:

                    【解决方案9】:

                    我的解决方案有点不同。

                    1. 点击界面生成器中的xib
                    2. 选择左侧的文件所有者
                    3. 打开文件所有者的连接检查器
                    4. 如果视图属性尚未绑定,按住 Control 键将其拖动到视图图标(在文件的所有者和第一响应者图标下)。

                    【讨论】:

                      【解决方案10】:

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

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

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

                      【讨论】:

                        【解决方案11】:

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

                        【讨论】:

                          【解决方案12】:

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

                          【讨论】:

                          • 当我为放在 MainWindow.xib 中的 GameViewController 手动设置“NIB 名称”(之前为空)时,它开始工作。非常感谢!我花了几个小时试图解决这个问题。为什么它会首先尝试加载错误的 xib 仍然是一个谜,但至少它可以工作。
                          猜你喜欢
                          • 1970-01-01
                          • 2012-03-10
                          • 1970-01-01
                          • 1970-01-01
                          • 2011-07-20
                          • 1970-01-01
                          • 2018-01-02
                          • 1970-01-01
                          • 2019-06-09
                          相关资源
                          最近更新 更多