无法实例化名为IBNSLayoutConstraint的类

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

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

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

方法1

  1. 右键单击您的Storyboard>打开为>源代码
  2. 在打开的故事板xml中,searchplaceholder="YES"
  3. 你会发现设置在运行时被删除的约束。 从约束中移除占位符属性,保存并closures。
  4. 运行应用程序,你的问题应该修复。

方法2

  1. 在Interface Builder中find导致问题的约束。 在GUI中取消选中占位符选项。 这应该是在ViewController中设置为IBOutlet的约束之一,这会导致您的崩溃。

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

这应该是这样的:

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

替代

假设你实际上希望约束是一个占位符,那么你将需要删除任何引用sockets。 为此,请select您希望成为占位符的约束。 然后打开连接检查器(最右边的button,如下所示:( – >)),然后删除该约束中可能存在的任何引用出口。

我刚刚有同样的问题,以下为我工作。

我发布了一个应用程序的工作版本到App Store,几天后又重新开始工作,在UITabBarController的一个选项卡上碰到了一个错误:

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

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

我的解决scheme是简单地closures大小类,并保持iPhone的大小类数据(应用程序仅适用于iPhone)。 这一定是删除了我在大小class里错过的任何东西。 我想要大小类,所以我把它们重新打开,应用程序再次工作。

这可能不一定是约束问题。 对我来说,这是由于没有select适用于我的布局的大小类的“安装”,请参阅此处 安装必须被检查

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

最后发生在我身上的是我在Interface Builder里面把一个子视图复制到另一个xib中。 这使原来的xib界面生成器中的子视图变灰。 从其原始位置删除子视图(通过select和删除)。 我能够摆脱这个错误。

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

我做了一个滚动视图的更改,以便它可以让embedded在其中的select器控件正常使用我在其他位置find的解决scheme。 我的新故事板只是将这些属性添加到滚动视图,这对我来说似乎很好。

  delaysContentTouches="NO" canCancelContentTouches="NO" 

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

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

我不知道它来自哪里。 起初我忽略了它,因为在我的开发机器上,一切似乎都能find。 但是当这个版本被构build为Release和testing时,我得到了崩溃。 去除虚假(?)碎片修复了崩溃,似乎没有影响其他任何东西。

当我在自定义UICollectionViewCell中有一个button时,遇到了这个问题,并且在该类上有一些IBOutlets的约束。 我将button从单元格移动到父视图控制器,IBOutlets仍然在单元格中引用,但实际上并没有存在于单元格中,所以将所有东西吹起来。 只需要删除那些IBOutlets,一切正常工作再次!