NSInternalInconsistencyException 未捕获的异常“NSInternalInconsistencyException”,原因:“无法在包中加载 NIB:带有名称的 NSBu

Posted

技术标签:

【中文标题】NSInternalInconsistencyException 未捕获的异常“NSInternalInconsistencyException”,原因:“无法在包中加载 NIB:带有名称的 NSBundle【英文标题】:NSInternalInconsistencyException uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: NSBundle with name 【发布时间】:2013-06-03 19:34:24 【问题描述】:

我的 ios 应用程序出现奇怪错误。从昨天开始一切都运行良好,今天我对与 AppDelegate 无关的视图控制器进行了一些改进,当我尝试测试我在模拟器上所做的更改时,我收到了这个错误:

* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在其中加载 NIB 捆绑:'NSBundle (已加载)',名称为 'xxx'

我在谷歌和这个网站上搜索了很多试图找到解决方案,我发现的所有主题都是关于 xib 文件的问题。但是,我使用的是故事板,我的应用程序只有 iOS6.1,所以我没有 xib 文件......我还检查了故事板是否包含在“构建阶段”中,并且一切似乎都是正确的:s。我知道当某些文件包含在 Finder 中但未包含在 Xcode 中时可能会发生此错误,但对我而言并非如此:我总是将文件直接包含在 Xcode 中并选中“将文件复制到目录”选项。我什至试图恢复我所做的更改,但我仍然有这个问题,所以我真的不知道发生了什么。在这个阶段我的应用程序非常简单,我只有几个通过导航控制器和 1 个外部框架(AFNetworking)连接的视图控制器。我的 AppDelegate(似乎发生错误的地方)很干净:我没有向 Xcode 提供的示例代码添加任何内容。

我真的被这个问题困住了,我希望你能找到一种方法来帮助我解决它。

【问题讨论】:

您是否本地化了您的故事板? 不,我有自动提供的“en”本地化故事板(我猜)。但我没有做任何事情来本地化我的应用程序。 还有一件事,点击你的故事板文件 -> 显示文件检查器 -> 目标成员,确保项目上有一个复选标记。 错误信息中真的是“...name 'xxx'”吗? 不,我改成 xxx 但真正的 'nam' 只是一个不能给出任何指示的代码(并且会增加标题的权重 ^^)。如果我错了,请纠正我。 【参考方案1】:

首先,尝试使用 Xcode/Product/Clean 菜单项。如果不这样做,则转到 Organizer,切换到 Projects,然后删除项目的 Derived 文件夹。如果您执行第二个操作,请退出 Xcode 并重新开始,以确保所有内容都已擦除。

编辑:如果你愿意,把它压缩起来,然后发送到我个人资料中的电子邮件地址。我只能花几分钟时间,但至少会看看。

EDIT2:在这里学到了一些东西,但没有解决。您所看到的是 StoryBoard 正在尝试生成 rootViewController,但失败了 - 应用程序委托甚至从未收到消息。 EventsTVC 类被发送initWithCoder:,然后被要求提供它的 nibName,它返回。这个 nibName 是情节提要中的一个标识符 - 并且是 Apple 内部必须用来构建一个 nib 的标识符。然而,这失败了。您可以通过将此添加到 EventsTVC 来查看名称:

- (NSString *)nibName

    NSLog(@"NIB NAME %@", [super nibName]);

我为重现该问题所做的是创建一个新的 StoryBoard Master/Detail 应用程序,并将其添加到 rootviewcontroller:

- (NSString *)nibName

    NSLog(@"NIB NAME %@", [super nibName]);
    return [[super nibName] stringByAppendingString:@"foo"];

这当然会使 nibName 伪造,并导致应用程序在您的应用程序中失败,并显示相同的消息。

您有两个选择:您可以在此上刻录 DTS 事件 - 看看是否可以让 Apple 修复它(可能需要几天时间),或者您可以重做项目,并尽可能多地复制回到新的应用程序。

无论如何,如果您可以将相同的 zip 文件发送给 Apple 并创建一份错误报告,那就太好了。我怀疑故事板在内部已损坏,但没有可用于深入研究的公共方法(查看 UIStoryBoard)。

【讨论】:

我都试过了。 “Clean”方法没有改变任何东西,第二个方法也没有改变......当我在模拟器上启动应用程序时仍然遇到问题,异常发生在“main”函数中。 不一定——当你将块分派到主线程时也会显示。您是否设置了异常断点?如果没有设置它(在这里搜索如何设置 - 它很容易)。这个想法是进入调试器发生的地方。您的改进 - 没有更改名称,对吗?叹息 - 我对故事板没什么经验。 是的,我有一个异常断点,它在抛出异常之前显示“main”函数。然后,如果我单击继续,则会抛出我粘贴的异常。当我进行改进时,我没有更改任何 ViewController 名称,正如我所说,我试图恢复它们,但我仍然遇到问题...... 是的,我刚刚给你发了电子邮件。谢谢! 感谢您的反馈,这真的很有趣。我确实创建了一个 DTS 事件以了解有关该问题的更多信息,并且我一定会向您提供有关我将收到的答案的信息。但是,我的项目还不重要,所以我可能会(几乎)从头开始重做,希望这个问题不会再次出现。【参考方案2】:

从 ios7 和 Xcode 5 开始,它每天早上都对我这样做!我不知道他们在 xcode 中做了什么乱七八糟的事情,但这很烦人。如果您想通过此错误,请转到管理器,然后删除“派生数据”(如果它不想删除,请使用旧的 rm -rf 在终端中删除它),然后运行您的应用程序,它将再次崩溃,这次去你的模拟器并点击重置设置和一切。现在再次运行您的应用程序:) !

【讨论】:

以上是关于NSInternalInconsistencyException 未捕获的异常“NSInternalInconsistencyException”,原因:“无法在包中加载 NIB:带有名称的 NSBu的主要内容,如果未能解决你的问题,请参考以下文章

无法在包中加载 Nib - 错误的 nibname 错误