应用程序在 iOS 6 上运行但在 iOS 5 上不运行 [重复]

Posted

技术标签:

【中文标题】应用程序在 iOS 6 上运行但在 iOS 5 上不运行 [重复]【英文标题】:App working on iOS 6 but not working on iOS 5 [duplicate] 【发布时间】:2012-12-17 04:02:43 【问题描述】:

可能重复:presentViewController: crash on ios <6 (AutoLayout)How to use NSLayoutConstraint in iOS 6?App failing to load

我刚开始在 iOS6 SDK 中开发一个应用程序,它在 iOS 6 设备和 iOS 6 模拟器上运行流畅,但在 iOS 5 或 iOS 5 模拟器上无法运行。我已将部署目标设置为:5.0

这是它尝试打开但失败时给我的错误...

2013-01-02 14:22:57.075 MyApp[34956:c07] *** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named NSLayoutConstraint'
*** First throw call stack:
(0x14a5052 0xea5d0a 0x144da78 0x144d9e9 0x3327d7 0x3329af 0x3326b7 0x23336d 0xdae2c 0xdb3a9 0xdb5cb 0x3ba73 0x3bce2 0x3bea8 0x42d9a 0x2845 0x139d6 0x148a6 0x23743 0x241f8 0x17aa9 0x138ffa9 0x14791c5 0x13de022 0x13dc90a 0x13dbdb4 0x13dbccb 0x142a7 0x15a9b 0x257d 0x24a5)
terminate called throwing an exception(lldb) 

我该如何解决这个问题?

【问题讨论】:

***.com/questions/11252057/… ***.com/questions/12687979/… Apple 在主要版本之间进行了许多更改。一般来说,如果你想让代码在以前的版本上工作,你应该主要针对那个以前的版本,并希望没有太多的不兼容性。 (但正如 Brian 指出的那样,仅将部署目标设置为先前版本是不够的——您需要有意识地避免仅在较新版本中发现的设施。) 【参考方案1】:

您正在使用 AutoLayout,这是一项仅在 iOS6 中可用的功能。您需要将您的 iOS 版本限制为 iOS6,或者您需要通过进入 .xib 或情节提要并禁用它来禁用 AutoLayout。

【讨论】:

是的,我同意这是一个选项,但如果您要动态添加自动布局代码,同时在代码或旧样式的 IB 布局中执行相同的计算以支持 iOS 确实有效。由于 iPhone5 仅支持 iOS6 及更高版本,因此有时它是一种选择。【参考方案2】:

不幸的是,将您的部署目标设置为以前的操作系统版本实际上并不会阻止您使用仅在更高版本中可用的 API(或者在这种情况下为 Interface Builder 功能)。

【讨论】:

以上是关于应用程序在 iOS 6 上运行但在 iOS 5 上不运行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

选择器不在 iOS6 中填充,但在 iOS 5.1 中填充

Storyboard 应用程序在 iOS 7 上运行正常,但在 iOS 6.1 上导航栏切换视图

AVAudioPlayer 后台任务无法在 iOS 5.0.1 设备上运行,但在 iOS 5 模拟器上运行

在iPhone 8上的iOS 11.2上运行的离子动态图像,但在iPhone 6上不在11.2上

带有自定义单元格的 UITableView 在 iOS 6 上画得很好,但在 iOS 7 上完全是白色的

在没有 XCODE 5 的运行 iOS7 的设备上测试 iOS 6 应用程序