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


92

这是我遇到的怪异崩溃。当我按下转到某个ViewController的按钮时,发生崩溃。它崩溃的行是:

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上崩溃


2
升级到在iPhone 5.1上运行的Xcode 4.5和应用后,我遇到了相同的问题。请看以下链接:artstudioh.com/calculator/images/error_xcode.png
Sinuhe Huidobro

是的,我认为我们已经确立了这一点:)
MCKapur 2012年

Answers:


201

我相信这是Xcode的新界面生成器的问题。您是否碰巧使用Xcode 4.5的界面生成器来构建.xib?我刚才也遇到了同样的问题,我认为这就是问题所在。我的应用程序可在iOS 6上运行,但没有更老的版本。

并且您需要确保关闭Use Auto Layoutxibs

可以通过以下方式完成:

  1. 打开您的xib。
  2. 转到File Inspector标签。
  3. 找到Interface Builder Document右侧工具栏上的部分。
  4. 取消选中该Use Auto Layout选项。

37
是的,您需要确保关闭笔尖的“使用自动布局”功能。
Wevah 2012年

是的,同样的问题。怎么办呢?我应该在Xcode 4.4上测试它吗(这可能是原因,出于某种奇怪的原因,我的iPhone 4 iOS 5.1可以在Xcode 4.5上运行...即使它不是iOS 6也可以运行)
MCKapur 2012年

16
在xib的主视图中,右侧工具栏上的“界面构建器”的“文档”部分。
马克

对于感兴趣的任何人,我都在Xcode 4.5中为一个旧的视图控制器创建了一个nib文件,该控制器以编程方式设置其视图。我很快意识到我的新笔尖在iOS 5中无法使用,因此我删除了该笔尖文件,并开始出现类似错误,甚至认为新的笔尖文件甚至不在我的项目中!解决的办法是重命名.h和.m文件ugh。
凯勒2012年

2
令人担忧的是,这些天苹果公司的质量控制正在发生什么。
ardochhigh 2012年

43

屏幕截图

下载新的XCode更新和IOS6 SDK时遇到相同的问题。这是我解决的方法:

选择发生错误的“界面”构建器文件(xib或情节提要文件)。在XCode右侧的助手编辑器中,从左侧选择第一个选项卡,然后有一个复选框“ Use Autolayout”,如上面的屏幕截图所示。取消选中该复选框。


4

Nagaraja问:“如果我们不使用xib,如何解决同样的问题?我恰好遇到了这个问题。我用xib创建了一个控制器,然后我决定删除xib文件。崩溃没有消失。问题是我需要实施

- (void) loadView

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


1

presentViewController崩溃的另一个可能原因是笔尖中的某物连接到了一个不再存在的变量-该变量的名称已更改或已删除。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.