处理iOS/macOS上的不赞成意见的现代方法

处理iOS/macOS上的不赞成意见的现代方法,ios,objective-c,macos,deprecation-warning,Ios,Objective C,Macos,Deprecation Warning,如何抑制availability宏中的弃用警告?我知道可用性是检查新API的一个很好的方法,但我正在努力抑制不推荐警告。除了下面提到的以外,我还有什么其他选择?(1.pragma 2.性能选择器) 或者,使用以抑制警告 if ([NSKeyedUnarchiver respondsToSelector:@selector(unarchiveObjectWithData:)]) { model = [NSKeyedUnarchiver performSelector:@selector(u

如何抑制availability宏中的弃用警告?我知道可用性是检查新API的一个很好的方法,但我正在努力抑制不推荐警告。除了下面提到的以外,我还有什么其他选择?(1.pragma 2.性能选择器)

或者,使用以抑制警告

if ([NSKeyedUnarchiver respondsToSelector:@selector(unarchiveObjectWithData:)]) {
    model = [NSKeyedUnarchiver performSelector:@selector(unarchiveObjectWithData:) withObject:metadata];
}

仅当您使用的API在目标部署目标时或更早时被弃用时,才会收到弃用警告

NSKeyedUnarchiver unarchiveObjectWithData
从macOS 10.14开始就不推荐使用。只有当目标的部署目标是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或更早版本时,才应使用问题中的代码(不包括pragmas)。然后,需要将目标的部署目标设置为macOS 10.12或更早版本。在这种情况下,您不需要pragmas,也不会收到任何弃用警告。

是否要将您的方法标记为弃用?请重新阅读。对不起,我不明白。如果弃用是特定于操作系统版本的,则不应在
else
块中收到任何弃用警告。只是不要使用弃用的方法。或者,您可以通过将部署目标降低到未弃用的版本来抑制弃用警告。我认为您的部署目标现在是10.14。因此,您甚至不需要
@可用(macOS 10.13,*)
检查。感谢您的澄清。我使用部署目标10.12,并在mojave下将其切换到10.14。
if ([NSKeyedUnarchiver respondsToSelector:@selector(unarchiveObjectWithData:)]) {
    model = [NSKeyedUnarchiver performSelector:@selector(unarchiveObjectWithData:) withObject:metadata];
}