【问题标题】:presentViewController: crash on iOS <6 (AutoLayout)presentViewController: 在 iOS <6 (AutoLayout) 上崩溃
【发布时间】:2012-06-27 06:40:11
【问题描述】:

这是我遇到的奇怪崩溃。当我按下一个转到某个 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 上崩溃

【问题讨论】:

标签: objective-c ios xcode crash stack-trace


【解决方案1】:

我相信这是 Xcode 的新界面生成器的问题。您是否碰巧使用 Xcode 4.5 的界面构建器构建了您的 .xib?我刚才遇到了同样的问题,我认为这就是问题所在。我的应用在 iOS 6 上运行,但不是任何旧版本。

您需要确保为您的 xib 关闭 Use Auto Layout

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

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

【讨论】:

  • 是的,您需要确保为您的笔尖关闭“使用自动布局”。
  • 是的,同样的问题。该怎么办?我应该在 Xcode 4.4 上测试它吗(这可能是原因,出于某种奇怪的原因,我的 iPhone 4 iOS 5.1 可以在 Xcode 4.5 上运行......即使它不是 iOS 6)
  • 在 xib 的主视图中,右侧工具栏上的 Interface builder Document 部分。
  • 对于任何感兴趣的人,我在 Xcode 4.5 中为一个以编程方式设置其视图的旧视图控制器创建了一个 nib 文件。我很快意识到我的新 nib 不能在 iOS 5 中工作,所以我删除了 nib 文件,并开始收到类似的错误,甚至认为新的 nib 文件甚至不再在我的项目中!解决方案是重命名 .h 和 .m 文件,呃。
  • 有点担心这些天苹果的质量控制发生了什么。
【解决方案2】:

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

选择发生错误的界面构建器文件(无论是 xib 还是故事板文件)。 在 XCode 右侧的助手编辑器中,选择左侧的第一个选项卡,然后有一个复选框,用于选择“使用自动布局”,如上面的屏幕截图所示。 取消选中复选框。

【讨论】:

    【解决方案3】:

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

    - (void) loadView
    

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

    【讨论】:

      【解决方案4】:

      presentViewController 崩溃的另一个可能原因是 nib 中的某些内容连接到不再存在的变量 - 该变量的名称已更改或已被删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多