【发布时间】:2015-11-16 06:03:48
【问题描述】:
我已阅读UIAlertView/UIAlertController iOS 7 and iOS 8 compatibility 线程并尝试实现以下内容:
if objc_getClass("UIAlertController") != nil {
print("UIAlertController can be instantiated")
//make and use a UIAlertController
}
else {
print("UIAlertController can NOT be instantiated")
//make and use a UIAlertView
}
但是在我的环境中,带有 OS X El Capitan 的 Xcode 7.1.1,如果我将部署目标设置为 iOS 7.1,Xcode 会报告有关 UIAlertController 的错误并通过添加可用性来修复它们,如下所示:
if #available(iOS 8.0, *) {
alertContoller1(alertTitle, alertMessage: alertMessage)
}
和
@available(iOS 8.0, *)
func alertContoller1(alertTitle: String, alertMessage: String) {
let alertController = UIAlertController(title: alertTitle, message: alertMessage, preferredStyle: .Alert)
let okAction = UIAlertAction(title: "OK", style: .Default) {
(action) -> Void in
print("OK button tapped.")
}
alertController.addAction(okAction)
presentViewController(alertController, animated: true, completion: nil)
}
然后,当我使用 iOS 模拟器 7.1 (Xcode 6.4) 测试我的应用程序时,我的应用程序立即崩溃。
其次,当我尝试用 Xcode 6.4 打开我的项目时,有两个问题。
1.available(iOS 8.0, *) 部分出现编译错误。
2.如果我删除available(iOS 8.0, *) 部分,我的应用程序会崩溃并出现alertController 实例化错误
所以,这是一种“如果我对一个人是真的,我对另一个人就一定是假的”的情况
我想确认是否真的可以创建同时兼容iOS7.1和iOS8.0及更高版本的警报?
根据我对Android软件开发的了解,有注解@targetAPI和@SuppressWarnings("deprecation")。有没有等价的功能?
如果苹果的意图是切断旧设备,谁来拯救那些拥有旧设备的人?
【问题讨论】:
-
我曾经为 UIAlertController/UIAlertView 写过一个 swift 示例:Adding a simple UIAlertView.
-
您的 7.1 模拟器可以在 El Capitan 中运行吗?因为我的没有。可能是问题所在。
-
尝试在7.1模拟器中运行一个空项目。
-
@FreeNickname 我也无法在 El Capitan 上运行 iOS7.1 模拟器。所以我在我的另一台 Mac (Yosemite/Xcode6.4) 上运行 iOS7.1 模拟器。在Yosemite/Xcode6.4中,不能使用
available(iOS 8.0, *)版本检查... -
是的,问题是你要么坚持使用新的 Xcode 7+,要么坚持使用旧的 6.4。如果你坚持使用 7+,#availability 会起作用,但你需要一个设备来测试 iOS 7。但如果你使用 Xcode 6.*,你将不得不忘记 Swift 2.0。一种可能的解决方案(虽然有点烦人)是降级到 Yosemite 并使用 Xcode 7.1。据我所知,iOS 7 模拟器应该可以在 Yosemite 上运行良好。
标签: ios swift deprecated