如何抑制可用性宏中的弃用警告?我知道可用性是检查新API的一种好方法,但是我在努力抑制不赞成使用的警告。除了下面提到的以外,我还有什么选择? (1.pragma 2.performSelector)
MyModel *model;
if (@available(macOS 10.13, *)) {
NSError *error;
model = [NSKeyedUnarchiver unarchivedObjectOfClass:[MyModel class] fromData:metadata error:&error];
if (error) {
[[NSAlert alertWithError:error] runModal];
}
} else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated"
model = [NSKeyedUnarchiver unarchiveObjectWithData:metadata];
#pragma clang diagnostic pop
}
或者用来禁止警告
if ([NSKeyedUnarchiver respondsToSelector:@selector(unarchiveObjectWithData:)]) {
model = [NSKeyedUnarchiver performSelector:@selector(unarchiveObjectWithData:) withObject:metadata];
}
答案 0 :(得分:1)
仅当使用的API在目标的“部署目标”或更早之前被弃用时,您才会收到弃用警告。
从macOS 10.14开始不推荐使用 NSKeyedUnarchiver unarchiveObjectWithData
。仅当目标的Deployment Target是macOS 10.14或更高版本时,您才会收到弃用警告。但是您发布的代码暗示您希望支持macOS 10.12或更早版本。
NSKeyedUnarchiver unarchivedObjectOfClass:fromData:error:
已添加到macOS 10.13中。
如果您真的只想要macOS 10.13或更高版本的部署目标,则不需要if (@available(macOS 10.13, *))
或else
。只需使用新的API即可完成。
仅当您要支持macOS 10.12或更早版本时,才应使用问题中的代码(减去编译指示)。然后,您目标的Deployment Target需要设置为macOS 10.12或更早版本。而且在这种情况下,您不需要编译指示,也不会收到任何弃用警告。