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

3

在应用商店的应用程序中报告了崩溃,异常为:

`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. Copy Bundle Resources中存在xib文件
  3. xib文件链接到Target Membership
  4. xib文件的位置设置为Related to Group

代码使用AutoLayout而不是大小类。 项目针对iPad和iPhone分别具有符合命名约定的单独xibs。

是否有人遇到过相同的问题? 无法加载NIB的原因可能是什么?


执行清单时加1。 - Vishal Sonawane
同样的问题在这里。 - Forge
2个回答

2

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

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

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

`NSInternalInconsistencyException Could not load NIB in bundle.`

以下参考资料帮助我们得出了这个结论:
  1. 在iOS 10上,NSFetchedResultsController泄漏“打开文件描述符”
  2. socketpair失败24(打开文件太多)
我们是如何确定库的问题的:
  1. 我们从未在调试版本中观察到此问题,在生产环境中一直能够重现。
  2. 调试版本和生产版本之间的一个主要区别是,在调试版本中禁用了分析库。
  3. 我们可以在启用分析库的调试版本中重现该问题。
我们已将我们的观察结果报告给库开发团队,并等待回复。

2
我有同样的问题,我使用了 Fabric...但我不知道如何解决它! - Konstantinos Natsios

0

我和你一样遇到了同样的错误

当你从任何viewcontroller推送到VideoEventController时,你需要使用这段代码。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接