NSInvalidUnarchiveOperationException:无法实例化名为 NSLayoutConstraint 的类

Posted

技术标签:

【中文标题】NSInvalidUnarchiveOperationException:无法实例化名为 NSLayoutConstraint 的类【英文标题】:NSInvalidUnarchiveOperationException: Could not instantiate class named NSLayoutConstraint 【发布时间】:2012-10-23 11:41:36 【问题描述】:

我对此很陌生。我按照 Apple 的 iPhone 项目“HelloWorld”教程一步一步来。我在 iPhone 5.0 模拟器中运行它,它崩溃了:

2012-11-02 14:46:06.782 HelloWorld[9880:c07] * 终止应用程序到期 不被抓获 异常'NSInvalidUnarchiveOperationException',原因:'无法实例化 名为 NSLayoutConstraint 的类 * 首先抛出调用栈: (0x14a2052 0xea2d0a 0x144aa78 0x144a9e9 0x32f7d7 0x32f9af 0x32f6b7 0x23036d 0xd7e2c 0xd83a9 0xd85cb 0x38a73 0x38ce2 0x38ea8 0x3fd9a 0x10be6 0x118a6 0x20743 0x211f8 0x14aa9 0x138cfa9 0x14761c5 0x13db022 0x13d990a 0x13d8db4 0x13d8ccb 0x112a7 0x12a9b 0x1fed 0x1f15 0x1) 终止称为抛出异常(lldb)

谁能告诉我出了什么问题?我正在使用 Xcode 4.5。

【问题讨论】:

你必须在 xib/storyboard 中关闭自动布局功能 【参考方案1】:

默认情况下,当您在 Xcode 4.5 中创建新的 ios 项目时,您的故事板或 XIB 设置为使用 Autolayout,这是 iOS 6.0 中的新功能。 NSLayoutConstraint 类是自动布局系统的一部分,在旧版本的 iOS 中不存在。

如果您想将您的应用部署到旧版本的 iOS,您需要将您的故事板或 XIB 更改为使用自动布局。这是文件检查器中的一个复选框:

【讨论】:

我使用 ScreenFlow 进行捕获和裁剪。我使用 Photoshop 将 .mov 转换为 .gif。 这也适用于xib! 这样做会禁用从纵向到横向的视图旋转,即使实现了这些方法。如果您仍然希望轮换发生,您是如何解决问题的?在此先感谢,还有...漂亮的 gif ^^ @robmayoff 感谢您的 gif 和完美答案。我的问题在一秒钟内得到解决。 :) 我喜欢这个,所以我为异常断点创建了自己的。 rsaunders.co.uk/2013/06/add-exception-breakpoint.html【参考方案2】:

您的 Xib 文件(界面构建器文件)包含 iOS 5支持的 AutoLayout 元素。

在 Xcode 中,转到您的 .xib 文件,然后为每个文件关闭 AutoLayout。左侧应该有一个复选框,上面写着“使用自动布局”,取消选中它并重试。 (这是在左侧检查器的第一个选项卡下,当您选择了文件的所有者时)。

【讨论】:

【参考方案3】:

我在处理一个想要更新的旧项目时偶然发现了这个错误。我选择了“使用自动布局”复选框开始使用约束,但忘记将我的部署目标设置更新为 iOS 6。

【讨论】:

【参考方案4】:

您需要在 iPhone 6.0 模拟器中运行它。你的错误:

* Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named NSLayoutConstraint' *

建议您使用自动布局,它仅适用于 iOS 6。

【讨论】:

以上是关于NSInvalidUnarchiveOperationException:无法实例化名为 NSLayoutConstraint 的类的主要内容,如果未能解决你的问题,请参考以下文章