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

iOS 10: Fatal Exception: NSInternalInconsistencyException Could not load NIB in bundle

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

清单:

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

代码使用 AutoLayout 但不使用大小 类。项目有单独的 xibs iPad 和 iPhone 遵守命名约定。

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

我和你的错误一样

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

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

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

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

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

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

`NSInternalInconsistencyException Could not load NIB in bundle.`

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

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

我们如何关注图书馆:

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

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