UINib initWithNibName 在应用程序加载之前崩溃

Posted

技术标签:

【中文标题】UINib initWithNibName 在应用程序加载之前崩溃【英文标题】:UINib initWithNibName crash before app load 【发布时间】:2015-04-14 03:54:58 【问题描述】:

我有一个 ios 应用程序在模拟器上运行良好,但在所有设备上崩溃并出现此错误:

<Warning>: *** Assertion failure in -[UINib initWithNibName:directory:bundle:], /SourceCache/UIKit/UIKit-3318.16.14/UINib.m:98
Apr 13 23:24:52 Feifan-Zhous-iPad splashboardd[14537]
<Error>: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: (name != nil) && ([name length] > 0)'

该应用采用 Swift 语言,在 Xcode 6.1.1 上运行。这里的设备是运行 iOS 8.1 的 iPad Mini 4,4(但崩溃发生在包括 iPhone 在内的所有设备上,从 iOS 7.0 开始)。

值得注意的是崩溃发生在应用程序启动之前(application:didFinishLaunchingWithOptions: 永远不会被调用)并且 Xcode 中的异常断点不会捕获任何东西。

应用程序使用Main.storyboard 文件作为主界面文件。在 Copy Bundle Resources 阶段它不是红色。该应用程序没有在任何地方使用initWithNibName:directory:bundle

有没有人遇到这个错误并找到了解决方法?工作很少

【问题讨论】:

能否提供更多源代码?我认为主要故事板场景或主要故事板场景的类中存在问题。您可以将另一个视图控制器设置为初始视图并查看应用程序是否正常启动。然后你可以去损坏的场景并在调试器中查看它崩溃的地方...... 您解决了这个问题吗?我也遇到了同样的问题,已经成为瓶颈 【参考方案1】:

我有一个 iOS 应用在模拟器上运行良好,但在所有设备上都崩溃了

看起来它必须是文件名大写的东西。我想您已经在 Mac 上安装了不区分大小写的文件系统,因此模拟器将名称“文件”视为“文件”(甚至是“文件”),而 iOS 设备具有区分大小写的文件系统,因此文件名区分大小写。

我想你为你的初始视图控制器设置了错误的类名,它不能被实例化。

【讨论】:

【参考方案2】:

您可能在 initWithNibName:directory:bundle 中初始化了一个从未被调用过的 nib 名称。

将初始化代码从 initWithNibName:directory:bundle 移动到 awakeFromNib。

【讨论】:

【参考方案3】:

我遇到了同样的问题,如果您注册的 nib 文件的文件/参考名称错误,请检查 rootViewController/InitialView。如果我在拨打网络电话时在viewDidLoad 中注册UICollectionViewCells 时,没有显示崩溃的位置。

【讨论】:

以上是关于UINib initWithNibName 在应用程序加载之前崩溃的主要内容,如果未能解决你的问题,请参考以下文章

initWithNibName 没有被调用

卡在 initWithNibName

在我告诉他启动之前,不应启动 UINib 文件

使用 UINib 为 UITableViewCell 分配插座

持久化 UINib 数组

Objective-C - 给定一个 UINib 实例,我如何初始化我的自定义 UIView?