gpt4 book ai didi

ios - 处理过时的API的正确方法

转载 作者:行者123 更新时间:2023-12-01 18:04:26 35 4
gpt4 key购买 nike

有一个Obj-C文件,该文件包含在具有不同部署目标的多个项目中。该文件具有以下代码行:

[[UIApplication sharedApplication] openURL:url];

编译针对iOS 10的项目时,出现警告:

不建议使用“openURL:”:在iOS 10.0中首先不建议使用-请改用openURL:options:completionHandler:

我试图通过以下构造对其进行修复:
if (@available(iOS 10.0, *)) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
[[UIApplication sharedApplication] openURL:url];
}

但它仍然会产生相同的警告!

我不想在全球范围内关闭此警告,所以我的结论很可怕
if (@available(iOS 10.0, *)) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
[[UIApplication sharedApplication] openURL:url];
#pragma clang diagnostic pop
}

所以我想知道我是否真的需要一个如此丑陋的代码,或者我错过了一些东西,而这种情况本可以以另一种(更优美的方式)处理?

最佳答案

如果您的目标是iOS 10及更高版本,则无需支持已弃用的API。只需使用新的。

不需要if/else。做就是了:

[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];

而已。此更新的API是在iOS 10.0中添加的。由于您仅支持iOS 10及更高版本,因此无需尝试使用不建议使用的API。

如果支持iOS 10及更高版本的某些项目以及某些需要支持iOS 10之前的项目正在使用此代码,则您需要类似以下内容:
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_10_0
if (@available(iOS 10.0, *)) {
#endif
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_10_0
} else {
[[UIApplication sharedApplication] openURL:url];
}
#endif

此编译器指令的作用是,当在具有iOS 10.0或更高版本的Deployment Target的项目中构建时,编译后的代码将变成:
[[UIApplication sharedApplication] openURL:url options:@{} 

如果代码是在具有iOS 10.0之前的“部署目标”的项目中构建的,则编译后的代码将为:
if (@available(iOS 10.0, *)) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
[[UIApplication sharedApplication] openURL:url];
}

关于ios - 处理过时的API的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54188808/

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