gpt4 book ai didi

ios - UIAlertView/UIAlertController iOS 7 和 iOS 8 兼容性

转载 作者:IT王子 更新时间:2023-10-29 04:58:46 25 4
gpt4 key购买 nike

我正在使用 Swift 编写一个应用程序,我需要显示一个警报。该应用程序必须与 iOS 7 和 iOS 8 兼容。自 UIAlertView已替换为 UIAlertController ,如何检查 UIAlertController不检查系统版本就可以使用?我一直听说 Apple 建议我们不应该检查设备的系统版本来确定 API 的可用性。

这是我在 iOS 8 上使用的,但它在 iOS 7 上崩溃并显示“dyld: Symbol not found: _OBJC_CLASS_$_UIAlertAction”:

let alert = UIAlertController(title: "Error", message: message, preferredStyle: .Alert)
let cancelAction = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
alert.addAction(cancelAction)
presentViewController(alert, animated: true, completion: nil)

如果我使用 iOS 8 的 UIAlertView,我会收到此警告:Warning: Attempt to dismiss from view controller <_UIAlertShimPresentingViewController: 0x7bf72d60> while a presentation or dismiss is in progress!

最佳答案

检测模式与 Objective-C 风格相同。

需要检测当前active runtime是否有实例化该类的能力

if objc_getClass("UIAlertController") != nil {

println("UIAlertController can be instantiated")

//make and use a UIAlertController

}
else {

println("UIAlertController can NOT be instantiated")

//make and use a UIAlertView
}

不要尝试根据操作系统版本来解决这个问题。您需要检测能力而不是操作系统。

编辑

此答案的原始检测器 NSClassFromString("UIAlertController")-O 优化下失败,因此它已更改为适用于发布版本的当前版本

编辑 2

NSClassFromString 正在 Xcode 6.3/Swift 1.2 中进行所有优化

关于ios - UIAlertView/UIAlertController iOS 7 和 iOS 8 兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25111011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com