作为iOS开发人员,我们始终需要了解iOS更新。有时在高版本的iOS中不推荐使用旧版本的特定方法。
但是我们需要支持多个版本的设备,因为我们的用户使用的是不同版本的iOS。所以我们需要实现新版本,同时我们仍然需要保留旧版本。但是,在编译应用程序时。使用新版本的警告确实困扰着开发人员。情况就是这样。
if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) {
// iOS 10 +
[application openURL:url options:@{} completionHandler:nil];
} else {
// iOS 9
[application openURL:url];
}
这里[application openURL:url]总是给我一个警告,我怎样才能摆脱警告?
答案 0 :(得分:0)
如果你发现与warring相关的弃用,并且它属于clang或GCC,你可以更好地使用宏(Availability.h)。
if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) {
// iOS 10 +
[application openURL:url options:@{} completionHandler:nil];
} else {
// iOS 9
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
[application openURL:url];
#pragma clang diagnostic pop
}
更多警告相关参考:http://fuckingclangwarnings.com/
答案 1 :(得分:0)
<强>目标C 强>
我只是使用声明
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
在使用任何弃用的API来抑制警告之前。
在您的情况下代码将是
if ([UIApplication respondsToSelector:@selector(openURL:options:completionHandler:)]) {
// iOS 10 +
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
// iOS 9
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
[[UIApplication sharedApplication] openURL:url];
}
}
<强>夫特强>
在swift中支持多个版本SDK API的最佳方法是使用available
属性。
if UIApplication.shared.canOpenURL(url){
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(url)
}
}