无法在捆绑中加载NIB:'NSBundle'

时间:2011-02-24 02:29:21

标签: ipad simulator

下面列出的错误是什么?

  

2011-02-23 21:24:12.218成功[7238:207] * 由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无法在bundle中加载NIB:'NSBundle&lt ; / Users / jimkillen12 / Library / Application Support / iPhone Simulator / 4.2 / Applications / BAA5E0E7-AF12-4301-A4F8-1B9797C9E82D / Success.app> (加载)'名称'MainWindow-iPad''

14 个答案:

答案 0 :(得分:31)

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

在构建阶段

  1. 展开Copy Bundle Resources
  2. 点击底部的+
  3. 添加所需的NIB文件。
  4. Shift+Cmd+K清理您的构建,然后运行。

    P.S。同时确保在调用initWithNibName:@"ViewNameController"

    使用NIB文件的确切拼写

    可能,您已通过小写字母在呼叫中为您的NIB命名,或者您可能还包含扩展名.xib,这不是必需的

答案 1 :(得分:12)

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

例如,

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

会失败。您需要更改为:

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

答案 2 :(得分:3)

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

我刚刚使用此

删除了我的错误

答案 3 :(得分:2)

我遇到了同样的问题,但那是因为我写了扩展名.xib而且不是必要的

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

而不是

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

答案 4 :(得分:1)

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

右键单击该文件,然后单击“获取信息”以验证该类型是否符合预期。

答案 5 :(得分:1)

在我的情况下是下一个:

我在代码XIB中加载了名称为“?????? Ipad” 但是XIB文件名是“?????? IPad”

答案 6 :(得分:1)

请确保您的nib / xib文件包含在相应的目标成员中。

答案 7 :(得分:1)

我遇到同样的问题只需遵循步骤。

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

2.复制您的NIB文件哪个崩溃应用

3.只需更改名称

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

我的代码在

之下

旧代码

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

我只是更改姓名

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

它为我工作。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

有关详细信息,请参阅:Could not load nib in bundle base internationalization

答案 10 :(得分:0)

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

答案 11 :(得分:0)

0

例如,如果您使用UIViewController类名称作为TextPicker,那么您需要使用类似波纹管的代码

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

如果您在其他项目中将TableView和Xib用作Framework

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

let bundle = Bundle(用于:TextPicker.self)

答案 12 :(得分:0)

就我而言,错误是“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 清理项目,它会工作。

答案 13 :(得分:0)

就我而言(使用 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”来解决。