【发布时间】:2011-07-03 06:01:54
【问题描述】:
下面列出的错误是什么?
2011-02-23 21:24:12.218 Success[7238:207] * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在捆绑包中加载 NIB:'NSBundle (已加载)',名称为'MainWindow-iPad''
【问题讨论】:
下面列出的错误是什么?
2011-02-23 21:24:12.218 Success[7238:207] * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在捆绑包中加载 NIB:'NSBundle (已加载)',名称为'MainWindow-iPad''
【问题讨论】:
项目中缺少您的一个 NIB 文件,添加所需的 NIB 文件:
在构建阶段
+
通过Shift+Cmd+K 清理您的构建,然后运行。
P.S.另外请确保在调用initWithNibName:@"ViewNameController"时使用NIB文件的准确拼写
可能,您在通话中使用 小写字母 命名了您的 NIB,或者您可能还包含了 不需要的扩展名 .xib .
【讨论】:
您可能在调用中使用小写字母命名了您的 NIB。在这种情况下,模拟器可以正常工作,但 iPhone 设备会在运行时返回错误。
例如,
DetailViewController *detailViewController = [[DetailViewController alloc]
initWithNibName:@"detailViewController" bundle:nil];
会失败。您需要更改为:
DetailViewController *detailViewController = [[DetailViewController alloc]
initWithNibName:@"DetailViewController" bundle:nil];
【讨论】:
在您的构建设置中,添加架构 =>> armv6 和 armv7
我刚刚使用它删除了我的错误
【讨论】:
我也遇到了同样的问题,但这是因为我写了扩展名 .xib 而不是必需的
token_view = [[GetToken alloc] initWithNibName:@"GetToken_iPad.xib" bundle:nil];
而不是
token_view = [[GetToken alloc] initWithNibName:@"GetToken_iPad" bundle:nil];
【讨论】:
在我的情况下是下一个:
我加载了名为“??????Ipad”的代码 XIB 但 XIB 文件名是“??????iPad”
【讨论】:
是否有任何与 NIB 相关的警告?这通常是针对 NIB 文件中的错误(例如不正确的 NIB 类型)。
右键单击文件并单击“获取信息”以验证类型是否符合您的预期。
【讨论】:
另一个可能的问题:您正在使用 iOS 5 上的基本本地化(注意,它在 iOS 模拟器上有点工作,但在设备上不工作),但仅从 iOS 6 开始支持.
欲了解更多信息,请参阅:Could not load nib in bundle base internationalization
【讨论】:
请确保您的 nib/xib 文件包含在相应的 Target Membership 中。
【讨论】:
我有同样的问题,只需按照步骤操作即可。
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];
它对我有用。
【讨论】:
只需检查文件MainWindow.xib 是否存在于您的项目中。如果没有,只需添加名称为MainWindow.xib 的新接口文件即可。
【讨论】:
如果您尝试在从 nib 拾取的集合视图中加载 collectionView 单元格,那么您可能会看到错误“'NSInternalInconsistencyException',原因:'Could not load NIB in捆绑:“NSBundle” 当您从 nib 文件加载集合视图时,与故事板不同,您无法在 nib 上声明集合视图单元格。 正确的方法是使用新的 nib 创建一个新的自定义单元格,然后将其加载到集合视图中。 注意:不要忘记注册新的自定义集合单元格的笔尖。
【讨论】:
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)
【讨论】:
在我的情况下,错误是“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 清理项目,它会工作。
【讨论】:
就我而言(使用 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”来解决。
【讨论】: