【问题标题】:Could not load nib in bundle on iPhone device无法在 iPhone 设备上捆绑加载笔尖
【发布时间】:2011-05-08 12:06:37
【问题描述】:

我正在尝试在我的 iPhone 上测试我正在开发的应用程序。为此,我在 Xcode 上将目标从 Simulator 更改为 Device。该应用程序已正确上传到设备并且可以正常工作。显示了主视图,但如果我尝试打开辅助视图,应用程序会崩溃。

在 iPhone 日志上(我安装了 iPhone 配置实用程序来查看控制台[是从 iPhone 中查看日志的唯一方法吗?])我可以看到这个错误:

Could not load NIB in bundle

但是,在模拟器上它可以正常工作。怎么了?有什么想法吗?

【问题讨论】:

    标签: iphone ios4


    【解决方案1】:

    我遇到了同样的问题并像这样修复了它:

    1. 打开 XCode 目标
    2. 点击“构建阶段”标签
    3. 点击“复制捆绑资源”部分
    4. 点击+
    5. 添加缺失的 Nib 文件

    【讨论】:

    • 您可以将.xib文件从Resources拖到Copy Bundle Resources中
    • 对我来说,.xib 是按原样包含的(未编译为 nib),因此它崩溃了,在另一个项目中(它没有崩溃),它被编译为 .nib...知道如何编译它吗?我试过这种方式,但 xcode 只是打包 .xib 文件:(
    【解决方案2】:

    我发现有时设备区分大小写而模拟器不区分。

    你的 xib 文件名是什么?


    尝试从模拟器中卸载应用程序并重新安装 - 模拟器可能有一个旧文件从应用程序的先前运行中遗留下来 - 您是否在开发过程中重命名/移动了 xib?

    【讨论】:

    • 文件名为 singleView.xib(.h 和 .m),我从未重命名或移动过该文件,但我在另一个文件夹(不是类)上创建了它
    • 您可以编辑您的问题并将代码行放在您尝试加载 nib 文件的位置吗?
    • 您对设备区分大小写的回答是正确的。我有一个名为 XYZViewController.h/.m 的类和一个名为 XYZviewController 的 xib - 案例的差异导致应用程序在模拟器上运行良好,但当我尝试在设备上打开 xib 时崩溃。更改名称(在这种情况下为 xib)解决了这个问题。
    • 烦人是不是!很高兴我能帮上忙。
    • +1 用于再次卸载和安装...谢谢!我没有收到错误,但它正在加载 NIB/XIB 的非本地化(旧)版本。
    【解决方案3】:

    我遇到了类似的问题,并且遇到了同样的错误。原来我在“NIB名称:”下的属性面板中使用了xib文件的全名

    不要使用“SomeViewController.xib”,只需使用不带“.xib”扩展名的“SomeViewController”即可。

    【讨论】:

      【解决方案4】:

      我在调用initWithNibName:@"MyViewController"时遇到了同样的问题

      将调用更改为 initWithNibName:NSStringFromClass([MyViewController class]) 效果很好

      【讨论】:

      • 我在模拟器上运行时也遇到了这个异常。这个答案正是我解决问题所需要做的
      【解决方案5】:

      你可以试试这些:

      1. 确保大小写正确
      2. 使用不带“.xib”扩展名的 xib 文件名
      3. 删除任何 -(破折号)或其他特殊字符,使用 _(下划线)
      4. 从项目中移除 xib 文件并重新添加到 Xcode 项目中
      5. 检查构建设置并确保将部署更改为正确的 SDK

      【讨论】:

      • 从项目中删除 xib 文件并添加回为我工作的 Xcode 项目
      【解决方案6】:

      在我的例子中,xib 根本没有被复制到包中。一旦我将 xib 添加到应用程序目标的“复制捆绑资源”步骤中,一切都很好。

      【讨论】:

      • 这也正是我的问题。谢谢!
      【解决方案7】:

      我终于通过这两个步骤解决了这个问题:

      1. 在视图控制器文件检查器中,删除任何本地化 (仅用于测试)
      2. 确保您已检查正确的目标成员身份

      我不知道为什么它可以在模拟器上运行:(

      【讨论】:

        【解决方案8】:

        对我来说,问题正是 FreeAsInBeer 所说的:捆绑包中不知何故缺少了笔尖,而它以前就在那里并且在应用程序的早期版本中正常工作。

        为了解决这个问题,我做了以下事情:

        1. 在项目导航器中选择项目。
        2. 在项目设置中选择Build Phases
        3. 展开复制捆绑资源
        4. 向下滚动(如有必要)并点击 + 按钮。
        5. 在出现的对话框中,点击添加其他...按钮。
        6. 浏览文件系统中缺少的 .XIB 文件。
        7. 构建并运行...运行时应该会出现缺失的 nib。

        当我收到该消息时,这正是对我有用的方法。您的里程可能会有所不同,因为每个人的情况并不总是相同,但我希望这对遇到此问题的人有所帮助。

        -埃文

        【讨论】:

          【解决方案9】:

          我遇到了同样的问题。在我的例子中,笔尖名称是“MyViewController.xib”,我将它重命名为“MyView.xib”。这消除了错误。

          我还将一个项目从 XCode 3 迁移到 4.2。更改路径类型无关紧要。

          【讨论】:

          • 在发布完全重复的答案时你能小心点吗?这些往往会被标记为垃圾邮件。
          • 嗯..这是一个骗局吗?我不认为它是一个骗局。我没有看到另一个答案,其中笔尖的名称中不需要包含“控制器”。如果答案已经在这里,很高兴删除。
          【解决方案10】:

          我收到了同样的错误信息。 然而,我的问题是我手机上的语言设置为“英语”,而地区设置为“英国”。但是,无法加载的文件放在了 de.lproj 目录中。 将文件移动到根目录即可解决。

          【讨论】:

            【解决方案11】:

            当您使用情节提要而不是单个 Nib 文件时,可能导致此错误的一个简单错误是尝试在导入的 viewController 上 initWithNibName。如果是这种情况,那么只需初始化控制器,而不是尝试使用不存在的 nib 进行初始化,或者使用 nil 初始化这些字段。

            如果 Storyboard 没有 nib,请将 initWithNibName: bundle: 更改为 init 或 initWithNibName:nil bundle:nil

            【讨论】:

              【解决方案12】:

              不管怎样,当我的一个标签栏按钮分配了错误的类时,我收到了这个错误。

              【讨论】:

                【解决方案13】:

                我已经让它运行,从 xib 中删除所有本地化 在右侧窗口中。 可能文件在本地化文件夹中。

                【讨论】:

                  【解决方案14】:

                  我也有同样的问题。我的解决方案是删除视图的所有本地化。

                  【讨论】:

                    【解决方案15】:

                    我的行为与您描述的完全一样:在模拟器上工作,但在设备上运行时出现“无法在包中加载 NIB”,并且应用程序仍然卡在启动图像上。

                    在我的例子中,问题在于 Xcode 使用英语本地化自动创建的 MainWindow.xib 文件。我在我的应用程序中支持英语和意大利语,并意识到我缺少意大利语的本地化版本 MainWindow.xib。

                    因为我不需要本地化这个文件(它是 Xcode 默认创建本地化的)我通过简单地删除英文本地化解决了这个问题,所以相同的文件独立于本地化使用。解决问题的另一种方法是添加缺少的本地化版本(如果需要)。

                    应用程序在设备上崩溃,因为我的设备配置为意大利语。模拟器改为英语,这就是应用程序正常运行的原因。为了验证,我将模拟器设置为意大利语,应用程序崩溃,确认本地化问题。

                    【讨论】:

                      【解决方案16】:

                      当我从 initWithCoder 加载一个子视图控制器时,我也遇到了这个问题,这是一个初始化的好地方,但请记住,您必须在视图加载后将它添加为实际的子视图。

                      所以改成这样:

                      [self addChildViewController: self.pageViewController];
                      [self.view addSubview: self.pageViewController.view];
                      [self.pageViewController didMoveToParentViewController:self];
                      

                      ...从您的 init 方法中退出并进入 viewDidLoad。并不是说这是你的问题,但这可能对其他人有帮助。

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2012-06-01
                        • 1970-01-01
                        • 2016-11-30
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2010-10-07
                        相关资源
                        最近更新 更多