为啥这段代码在 iOS 5.1 中会崩溃,而在 iOS 6 中不会?

Posted

技术标签:

【中文标题】为啥这段代码在 iOS 5.1 中会崩溃,而在 iOS 6 中不会?【英文标题】:Why does this code crash in iOS 5.1 but not iOS 6?为什么这段代码在 iOS 5.1 中会崩溃,而在 iOS 6 中不会? 【发布时间】:2013-05-13 19:16:34 【问题描述】:

此代码是从“设置”选项卡内的“导航”视图中调用的。它在 ios 5.1 中的最后一行崩溃,但在 iOS 6 中没有。为什么?

else if (indexPath.section == 0 && [[settingsArray objectAtIndex:indexPath.row] isEqualToString:@"Unlock Premium Features"])
    
        InAppViewController *inappController = [[InAppViewController alloc] initWithNibName:@"InAppViewController" bundle:nil];
        inappController.titleString = @"Upgrade to Pro.";
        EditNavController *navController = [[EditNavController alloc] initWithRootViewController:inappController];
        [self.navigationController presentModalViewController:navController animated:NO];
    

它崩溃了:

[self.navigationController presentModalViewController:navController animated:NO];

这是崩溃:

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

【问题讨论】:

任何特定的崩溃消息/堆栈跟踪/任何东西? 它在presentModalViewController 线上崩溃了吗? 你确定不是反过来吗? 'presentModalViewController' 在 iOS 6 中已弃用。它可以替换为 presentViewController:animated:completion。 (***.com/questions/12507455/…) @leanne,'deprecated' 并不意味着'broken' - 它意味着'我们将在下一个版本中打破它';-j 是的,对不起 - 那是一个“呃”的时刻...... 【参考方案1】:

如果您在显示的视图中使用自动布局(如果您在默认情况下创建了一个新的笔尖),它将崩溃,因为自动布局仅在 ios 6 中引入。(来源:raywenderlich.com)

【讨论】:

感谢您展示如何禁用它。这是我视图上一个带有复选标记的愚蠢按钮,它使我的整个设置崩溃。谢谢! 仍然需要等待 2 分钟。别担心,我会的。 :)

以上是关于为啥这段代码在 iOS 5.1 中会崩溃,而在 iOS 6 中不会?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这段代码在 HPUX 上会崩溃?

为啥 false++ 在 Firefox 中会产生 SyntaxError 而在 Chrome 中会产生 ReferenceError?

函数指针 - 为啥这段代码会崩溃?

为啥这段代码在运行时会崩溃?它只是选项卡式视图中 SwiftUI 中的选择器

为啥这段代码不能用 clang 构建,用 gcc 崩溃,但用 VC++ 运行良好? [复制]

C 中的这段代码决定一个数字是不是是素数,它会因大数而崩溃。为啥?