无法实例化名为IBNSLayoutConstraint的类

zbr*_*rox 70 objective-c interface-builder ios swift

我正在使用XCode6 beta并试用Swift.当我在视图控制器中放置一些自动布局约束时,应用程序崩溃并出现以下错误: Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'

San*_*man 202

您收到此错误是因为您已将约束设置为在运行时删除的IBOutlet.在Interface Builder中将约束设置为占位符时会发生这种情况.由于约束被删除,当它取消归档时,它会抛出一个错误,说它不能这样做.

有两种方法可以解决这个问题.

方法1

  1. 右键单击故事板>打开为>源代码
  2. 在打开的故事板xml中,搜索placeholder="YES".
  3. 您将找到设置为在运行时删除的约束.从约束中删除占位符属性,保存并关闭.
  4. 运行应用程序,您的问题应该得到解决.

方法2

  1. 在Interface Builder中找到导致问题的约束.取消选中GUI中的Placeholder选项.这应该是在ViewController中设置为导致崩溃的IBOutlet的约束之一.

Interface Builder属性编辑器,显示选中的占位符选项.

它应该是这样的:

Interface Builder属性编辑器显示未选中的占位符选项.

替代

假设您确实希望约束为占位符,那么您将需要删除任何引用插座.为此,请选择您希望成为占位符的约束.然后打开连接检查器(最右边的按钮,如下所示:( - >)),然后删除该约束上可能存在的任何引用出口.

  • @DanielGalasko 如果您希望它成为占位符,则不要将其分配给 IBOutlet。 (2认同)

Phi*_*ore 6

我刚才遇到了同样的问题,以下内容对我有用.

我将我的应用程序的一个工作版本发布到App Store,几天后再次回到它上面,点击UITabBarController中的一个标签,它崩溃了,出现了错误:

Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'
Run Code Online (Sandbox Code Playgroud)

我没有任何我知道的占位符布局约束或约束不应该定义的出口.

我的解决方案是简单地关闭大小类并保留iPhone的大小类数据(App仅适用于iPhone).这肯定删除了我在尺寸类中错过的任何东西.我想要大小类,所以我重新打开它们,应用程序再次运行.