iOS 10:致命异常:NSInternalInconsistencyException 无法在包中加载 NIB

Posted

技术标签:

【中文标题】iOS 10:致命异常:NSInternalInconsistencyException 无法在包中加载 NIB【英文标题】:iOS 10: Fatal Exception: NSInternalInconsistencyException Could not load NIB in bundle 【发布时间】:2017-01-05 10:05:53 【问题描述】:

App store 应用程序出现崩溃报告,但以下情况除外:

`NSInternalInconsistencyException Could not load NIB in bundle...`

自过去两个月以来,ios 10 设备和多个 xib 文件都报告了此崩溃。

此类实例的详细信息:

Fatal Exception: NSInternalInconsistencyException
Could not load NIB in bundle: 'NSBundle </var/containers/Bundle/Application/XXX/MyApp.app> (loaded)' with name 'VideoView'`

Fatal Exception: NSInternalInconsistencyException
0  CoreFoundation                 0x18d7551b8 __exceptionPreprocess
1  libobjc.A.dylib                0x18c18c55c objc_exception_throw
2  CoreFoundation                 0x18d755100 -[NSException initWithCoder:]
3  UIKit                          0x193b04fcc -[UINib instantiateWithOwner:options:]
4  UIKit                          0x193965e14 -[UIViewController _loadViewFromNibNamed:bundle:]
5  UIKit                          0x193737980 -[UIViewController loadView]
6  UIKit                          0x1936035bc -[UIViewController loadViewIfRequired]
7  UIKit                          0x1936034ec -[UIViewController view]
8  MyApp                        0x100135580 -[VideoEventController addMediaPlaybackViewForChannel:andProgram:ofType:] (VideoEventController.m:113)

用于初始化视图控制器的代码是:

self.videoViewCtrl = [[VideoViewController alloc] initWithNibName:@"VideoView" bundle:nil];
[mediaView addSubview:self.videoViewCtrl.view]; //Crash trace points to this line in code

清单:

    对于特定的 xib,问题并不总是可重现,因此没有参考错误或 xib 名称中没有拼写错误 xib 文件存在于Copy Bundle Resources xib 文件链接到Target Membership 中的目标 xib 文件的位置设置为Related to Group

代码使用 AutoLayout 但不使用尺寸类。项目为 iPad 和 iPhone 提供了独立的 xib,遵循命名约定。

有人遇到过同样的问题吗? 加载 NIB 失败的原因可能是什么?

【问题讨论】:

加 1 用于执行清单。 同样的问题 【参考方案1】:

经过几个月的调查,我们终于找出了导致问题的原因。

我们有一个与应用程序集成的静态库(内部),用于分析目的。我们发现,这个库正在泄漏​​为 i/o 操作获取的文件描述符。

发生的情况是,一旦应用程序用完 i/o 资源,下一个资源请求就会失败。在我们的例子中,它是 xib 初始化。此错误导致应用程序崩溃并出现异常:

`NSInternalInconsistencyException Could not load NIB in bundle.`

以下参考资料实际上帮助我们得出了这个结论。

    On iOS 10, NSFetchedResultsController leaks 'open file descriptors' socketpair failed 24 (too many open files)

我们对库的归零是:

    我们从未在调试版本中观察到该问题,在生产中它始终可重现 调试构建和生产构建的主要区别之一是,分析库在调试中被禁用 我们可以在启用分析库的调试版本中重现该问题

我们已将我们的观察报告给图书馆开发团队并等待回复。

【讨论】:

我有同样的问题,我用的是面料...但我不明白如何解决它!【参考方案2】:

我遇到了和你一样的错误

当您从这里的任何viewcontroller 推送到VideoEventController 时,您需要使用此代码。

VideoEventController *vc = [[VideoEventController alloc]initWithNibName:@"VideoEventController" bundle:nil];

[self.navigationController pushViewController:vc animated:YES];

【讨论】:

以上是关于iOS 10:致命异常:NSInternalInconsistencyException 无法在包中加载 NIB的主要内容,如果未能解决你的问题,请参考以下文章

一些 logcat 错误 - 致命异常

尝试访问 TabBar 时 IOS swift 致命错误 nil 异常

致命异常:TokenRefresher

到 phpmyadmin 的致命异常 AsyncTask 连接

请求完成处理程序致命错误:在展开可选值异常时意外发现 nil

在发布(dexguard)上构建但在调试中没有出现致命异常