我正在使用XCode6 beta并试用Swift.当我在视图控制器中放置一些自动布局约束时,应用程序崩溃并出现以下错误:
Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'
您收到此错误是因为您已将约束设置为在运行时删除的IBOutlet.在Interface Builder中将约束设置为占位符时会发生这种情况.由于约束被删除,当它取消归档时,它会抛出一个错误,说它不能这样做.
有两种方法可以解决这个问题.
右键单击故事板>打开为>源代码
在打开的故事板xml中,搜索placeholder="YES"
.
您将找到设置为在运行时删除的约束.从约束中删除占位符属性,保存并关闭.
运行应用程序,您的问题应该得到解决.
在Interface Builder中找到导致问题的约束.取消选中GUI中的Placeholder选项.这应该是在ViewController中设置为导致崩溃的IBOutlet的约束之一.
它应该是这样的:
假设您确实希望约束为占位符,那么您将需要删除任何引用插座.为此,请选择您希望成为占位符的约束.然后打开连接检查器(最右边的按钮,如下所示:( - >)),然后删除该约束上可能存在的任何引用出口.
我刚才遇到了同样的问题,以下内容对我有用.
我将我的应用程序的一个工作版本发布到App Store,几天后再次回到它上面,点击UITabBarController中的一个标签,它崩溃了,出现了错误:
Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'
我没有任何我知道的占位符布局约束或约束不应该定义的出口.
我的解决方案是简单地关闭大小类并保留iPhone的大小类数据(App仅适用于iPhone).这肯定删除了我在尺寸类中错过的任何东西.我想要大小类,所以我重新打开它们,应用程序再次运行.