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构建(为了与该版本兼容),这会导致:警告:’nspropertyListSerialization’可能无法响应’dataWithPropertyList:format:options:error:’更糟糕的是,因为编译器不知道这个选择器,它可能会错误地传递参数.
NSInvocation是调用新API的已批准/最佳方式,就SDK而言,它还不存在吗?
解决方法 另一种做法是将自己的遗漏方法声明为相关类的一个类别.这将使编译器停止抱怨没有找到方法,但当然你仍然需要运行时检查你已经在做以避免实际调用该方法.您可能还希望使用可用性宏来包装此类声明,以便在您使用10.5 / 10.6 SDK之后将忽略它,并且您将无法获得不同的编译器投诉.这看起来像这样:#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_4 //ignore when compiling with the 10.5 SDK or higher@interface nspropertyListSerialization(MissingMethods)+ (NSData *)dataWithPropertyList:(ID)pList format:(nspropertyListFormat)format options:(nspropertyListWriteOptions)opt error:(NSError **)error;@end#endif总结
以上是内存溢出为你收集整理的objective-c – 如何有条件地使用新的Cocoa API全部内容,希望文章能够帮你解决objective-c – 如何有条件地使用新的Cocoa API所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)