我正在使用 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 风格相同。
需要检测当前活动运行时是否有能力实例化该类
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
}
不要尝试根据操作系统版本来解决这个问题。你需要检测能力NOT OS.
EDIT
这个答案的原始检测器NSClassFromString("UIAlertController")
在以下情况下失败-O
优化,因此已更改为适用于发布版本的当前版本
EDIT 2
NSClassFromString
正在 Xcode 6.3/Swift 1.2 中进行所有优化
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)