【问题标题】:Could not load NIB in bundle: 'NSBundle'无法在包中加载 NIB:“NSBundle”
【发布时间】:2011-07-03 06:01:54
【问题描述】:

下面列出的错误是什么?

2011-02-23 21:24:12.218 Success[7238:207] * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在捆绑包中加载 NIB:'NSBundle (已加载)',名称为'MainWindow-iPad''

【问题讨论】:

    标签: ipad simulator


    【解决方案1】:

    项目中缺少您的一个 NIB 文件,添加所需的 NIB 文件:

    在构建阶段

    1. 展开复制捆绑资源
    2. 点击底部的+
    3. 添加所需的 NIB 文件。

    通过Shift+Cmd+K 清理您的构建,然后运行。

    P.S.另外请确保在调用initWithNibName:@"ViewNameController"使用NIB文件的准确拼写

    可能,您在通话中使用 小写字母 命名了您的 NIB,或者您可能还包含了 不需要的扩展名 .xib .

    【讨论】:

    • 我试过了,但它一直显示为红色,好像文件不存在一样。
    • 它已经添加,虽然我得到了错误。你能解释一下为什么吗?
    【解决方案2】:

    您可能在调用中使用小写字母命名了您的 NIB。在这种情况下,模拟器可以正常工作,但 iPhone 设备会在运行时返回错误。

    例如,

    DetailViewController *detailViewController = [[DetailViewController alloc]
                initWithNibName:@"detailViewController" bundle:nil];
    

    会失败。您需要更改为:

    DetailViewController *detailViewController = [[DetailViewController alloc]
                initWithNibName:@"DetailViewController" bundle:nil];
    

    【讨论】:

    • 谢谢!模拟器上的一切确实运行良好......不知道为什么应该......
    • @Denis:你拯救了我的一天。
    【解决方案3】:

    在您的构建设置中,添加架构 =>> armv6 和 armv7

    我刚刚使用它删除了我的错误

    【讨论】:

      【解决方案4】:

      我也遇到了同样的问题,但这是因为我写了扩展名 .xib 而不是必需的

      token_view = [[GetToken alloc] initWithNibName:@"GetToken_iPad.xib" bundle:nil];
      

      而不是

      token_view = [[GetToken alloc] initWithNibName:@"GetToken_iPad" bundle:nil];
      

      【讨论】:

        【解决方案5】:

        在我的情况下是下一个:

        我加载了名为“??????Ipad”的代码 XIB 但 XIB 文件名是“??????iPad”

        【讨论】:

          【解决方案6】:

          是否有任何与 NIB 相关的警告?这通常是针对 NIB 文件中的错误(例如不正确的 NIB 类型)。

          右键单击文件并单击“获取信息”以验证类型是否符合您的预期。

          【讨论】:

          • 谢谢!当我打开“获取信息”时,唯一看起来不同的是文件路径。列出的那个看起来不像 NIB 错误中的那个。
          • 'NSBundle /jimkillen12/Library/Application Support/iPhone Simulator/4.2/Applications/BAA5E0E7-AF12-4301-A4F8-1B9797C9E82D/Success.app>(已加载)',名称为'MainWindow -iPad'' 而文件路径如下所示:/Users/jimkillen12/Downloads/DailySuccess/MainWindow.xib
          【解决方案7】:

          另一个可能的问题:您正在使用 iOS 5 上的基本本地化(注意,它在 iOS 模拟器上有点工作,但在设备上不工作),但仅从 iOS 6 开始支持.

          欲了解更多信息,请参阅:Could not load nib in bundle base internationalization

          【讨论】:

            【解决方案8】:

            请确保您的 nib/xib 文件包含在相应的 Target Membership 中。

            【讨论】:

              【解决方案9】:

              我有同样的问题,只需按照步骤操作即可。

              1.将您的项目复制到另一个地方。

              2.复制您的 NIB 文件哪个 Crash 应用程序。

              3.改名字就行了

              例如。旧文件 Demo.xib 比复制和更改名称 DemoNew.xib

              我的代码在下面

              旧代码

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

              我只是换个名字

              Demo *controller = [[Demo alloc]initWithNibName:@"DemoNew" bundle:nil];
              

              它对我有用。

              【讨论】:

                【解决方案10】:

                只需检查文件MainWindow.xib 是否存在于您的项目中。如果没有,只需添加名称为MainWindow.xib 的新接口文件即可。

                【讨论】:

                  【解决方案11】:

                  如果您尝试在从 nib 拾取的集合视图中加载 collectionView 单元格,那么您可能会看到错误“'NSInternalInconsistencyException',原因:'Could not load NIB in捆绑:“NSBundle” 当您从 nib 文件加载集合视图时,与故事板不同,您无法在 nib 上声明集合视图单元格。 正确的方法是使用新的 nib 创建一个新的自定义单元格,然后将其加载到集合视图中。 注意:不要忘记注册新的自定义集合单元格的笔尖。

                  【讨论】:

                    【解决方案12】:

                    0

                    例如,如果您使用 UIViewController 类名作为 TextPicker,那么您需要像 Bellow Code 一样使用

                      let bundle = Bundle(for: TextPicker.self)
                      super.init(nibName: "TextPicker" , bundle: bundle)
                    

                    如果您在其他项目中使用带有 Xib 的 TableView 作为框架

                      tableView.register(UINib.init(nibName: "TextPickerCell", bundle: bundle), forCellReuseIdentifier: "TextPickerCell")
                    

                    让 bundle = Bundle(for: TextPicker.self)

                    【讨论】:

                      【解决方案13】:

                      在我的情况下,错误是“nib 文件的名称不正确:

                      collectionViewOutlet.register(UINib(nibName: "CollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "Cell")
                      

                      建议将它们全部设置为相同,单元格标识符和nibName 也一样,所以要这样做:

                      collectionViewOutlet.register(UINib(nibName: "CollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "CollectionViewCell")
                      

                      如果它不起作用,试试这个:

                      Target -> Build Phases -> Copy Bundle Resources
                      

                      你会发现你的xib/storyborad是红色的。

                      只需删除它。此外,从项目中删除所有缺失文件的引用。

                      现在将这个storyboard/xib 文件再次拖到这个Copy Bundle Resources 中。它仍然会向您显示一个红色的文件,但不要担心。

                      Command + Shift + K 清理项目,它会工作。

                      【讨论】:

                        【解决方案14】:

                        就我而言(使用 XCode 12.5 和 Swift 5),问题是我根据 ViewController 的名称选择了 NIBName:

                        let nibName = String(describing: type(of: self)) 
                        let bundle = Bundle(for: type(of: self))
                        let nib = UINib(nibName: nibName, bundle: bundle)
                        let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
                        

                        所以我有“TestView.xib”和“TestViewController.swift”。这不匹配,只能通过将我的 ViewController 重命名为“TestView.swift”来解决。

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2012-09-25
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多