无法实例化名为IBNSLayoutConstraint的类

时间:2014-06-07 08:25:19

标签: ios objective-c swift interface-builder

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

8 个答案:

答案 0 :(得分:197)

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

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

方法1

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

    1. 在Interface Builder中找到导致问题的约束。取消选中GUI中的Placeholder选项。这应该是在ViewController中设置导致崩溃的IBOutlet的约束之一。
    2. Interface Builder attribute editor showing the Placeholder option checked.

      这应该是这样的:

      Interface Builder attribute editor showing the Placeholder option unchecked.

      替代

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

答案 1 :(得分:6)

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

我将我的应用程序的工作版本发布到App Store,几天后再次回来处理它在UITabBarController中的一个我的选项卡上它因错误而崩溃:

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

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

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

答案 2 :(得分:4)

这可能不一定是约束问题。对我来说,这是因为没有为适用于我的布局的尺寸类选中“已安装”,请参阅此处install must be checked

答案 3 :(得分:1)

使用大小类时存在一些问题。我从故事板属性中禁用了该选项,并仅使用自动布局。这不是一个大问题,因为该应用只是iPhone。

答案 4 :(得分:1)

最终发生的事情是我在Interface Builder中剪切了一个子视图,将其复制到另一个xib中。这使子视图保留在原始xib界面构建器中,并且显示为灰色。从其原始位置删除子视图(通过选择和删除)。我能够摆脱错误。

答案 5 :(得分:0)

当您选择不使用名为“使用自动布局”的检查器中的“显示文件检查器”下的约束的xib文件时,检查器窗口中有一个选项。

答案 6 :(得分:0)

我对滚动视图进行了更改,以便使用我在Stackoverflow中找到的解决方案让嵌入其中的选择器控件正常工作。 我的新故事板只是将这些属性添加到滚动视图中,这对我来说似乎很好。

     delaysContentTouches="NO" canCancelContentTouches="NO"

但另外,我在另一个场景的故事板中看到了以下新片段:

                    <variation key="default">
                        <mask key="subviews">
                            <exclude reference="86H-aM-wei"/>
                        </mask>
                    </variation>

我不知道它来自哪里。起初我忽略了它,因为一切似乎都在我的开发机器上找到了。但是当构建版本作为Release构建并经过测试时,我遇到了崩溃。删除那个虚假(?)碎片修复了崩溃并且似乎没有影响其他任何东西。

答案 7 :(得分:0)

当我在自定义UICollectionViewCell中有一个按钮时,我遇到了这个问题,并且在该类上有一些作为IBOutlets的约束。我将按钮从单元格移动到父视图控制器,并且仍然在单元格中引用了IBOutlets,但实际上并没有在单元格中存在,因此将所有内容都搞砸了。只需要删除那些IBOutlets,一切都运行良好!