在 10.6 中,Apple 添加了 +[NSPropertyListSerialization dataWithPropertyList:format:options:error:]
并将旧的 +[NSPropertyListSerialization dataFromPropertyList:format:errorDescription:]
标记为过时和很快就会被弃用。在 10.6 及更高版本上使用较新的调用并仍然在较早的操作系统版本上运行的一种方法是这样的:
if ([NSPropertyListSerialization respondsToSelector:@selector(dataWithPropertyList:format:options:error:)]) {
data = [NSPropertyListSerialization dataWithPropertyList:dict
format:NSPropertyListXMLFormat_v1_0
options:0
error:&err];
} else {
data = [NSPropertyListSerialization dataFromPropertyList:dict
format:NSPropertyListXMLFormat_v1_0
errorDescription:&errorDescription];
}
针对 10.4 SDK(为了与该版本兼容)构建,这会导致:warning: 'NSPropertyListSerialization' may not respond to '+dataWithPropertyList:format:options:error:'
更糟的是,因为编译器不知道这个选择器,它可能会错误地传递参数。
NSInvocation 是否是调用就 SDK 而言尚不存在的新 API 的认可/最佳方式?
最佳答案
IIRC,您想使用 10.6 SDK 并将部署目标 (MACOSX_DEPLOYMENT_TARGET) 设置为 10.4,因此 10.5/10.6 符号是弱链接的。然后你可以使用 respondsToSelector:
东西而不是得到警告。
当然,请确保您正在检查对象是否可以响应选择器,否则您将在 10.4/10.5 上崩溃。
关于objective-c - 如何有条件地使用新的 Cocoa API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1753263/