presentViewController:在iOS上崩溃<6(AutoLayout)

这是我得到的一个奇怪的崩溃。 当我按下去某个ViewController的button时发生崩溃。 它崩溃的路线是:

DestinationInformationViewController *info = [[DestinationInformationViewController alloc] init]; [info setModalTransitionStyle: UIModalTransitionStyleCrossDissolve]; [self presentViewController:info animated:YES completion: nil]; // CRASHES HERE [info release]; 

崩溃的痕迹是:

*** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named NSLayoutConstraint' *** First throw call stack: (0x3758288f 0x35287259 0x37582789 0x375827ab 0x3153d54d 0x3153d6bb 0x3153d423 0x314ce001 0x3143c3c7 0x31319c59 0x3128fc17 0x3129a267 0x3129a1d5 0x3133959b 0x31338367 0x84091 0x374dc3fd 0x31271e07 0x31271dc3 0x31271da1 0x31271b11 0x31272449 0x3127092b 0x31270319 0x31256695 0x31255f3b 0x33c9822b 0x37556523 0x375564c5 0x37555313 0x374d84a5 0x374d836d 0x33c97439 0x31284cd5 0x82bb3 0x71200) terminate called throwing an exception(gdb) Could not instantiate class named NSLayoutConstraint

注意:这在我的iPhone 4 iOS 5.1上崩溃,但不在我的iPhone 4S iOS 6 Beta 2上

我相信这是Xcode的新界面构build器的一个问题。 你碰巧用Xcode 4.5的界面生成器来构build你的.xib吗? 我刚刚遇到了同样的问题,我认为这是问题所在。 我的应用程序运行在iOS 6上,但没有更老的东西。

而且你需要确保你closuresUse Auto Layout xibs的Use Auto Layout

这可以通过以下方式完成:

  1. 打开你的xib。
  2. 转到File Inspector选项卡。
  3. 在右侧工具栏中findInterface Builder Document部分。
  4. 取消选中Use Auto Layout选项。

截图

当我下载新的XCode更新和IOS6 SDK时,我遇到了同样的问题。 以下是我解决它的方法:

select发生错误的接口生成器文件(无论是xib还是故事板文件)。 在XCode右侧的助手编辑器中,select左侧的第一个选项卡,在上面的屏幕截图中有一个选项“Use Autolayout”的checkbox。 取消选中checkbox。

Nagaraja问:“如果我们不使用xib,如何解决这个问题?我遇到了这个问题,我用xib创build了一个控制器,然后我决定删除xib文件,崩溃没有消失。我需要执行

 - (void) loadView 

在我的控制器类。 一旦我实施了这个方法,问题就解决了。

presentViewController崩溃的另一个可能的原因是在笔尖连接到一个不再存在的variables的东西 – variables要么更改名称,要么被删除。