在iOS / macOS上处理过时的现代方法

时间:2018-10-03 15:49:18

标签: ios objective-c macos deprecation-warning

如何抑制可用性宏中的弃用警告?我知道可用性是检查新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];
}

1 个答案:

答案 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或更早版本。而且在这种情况下,您不需要编译指示,也不会收到任何弃用警告。