首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用respondsToSelector时禁止显示"'…‘已弃用“

使用respondsToSelector时禁止显示"'…‘已弃用“
EN

Stack Overflow用户
提问于 2009-12-15 00:44:45
回答 5查看 21.8K关注 0票数 57

我在运行时选择最新的应用程序接口来支持10.4+:

代码语言:javascript
复制
if ([fileManager respondsToSelector:@selector(removeItemAtPath:error:)])
    [fileManager removeItemAtPath:downloadDir error:NULL];
else
    [fileManager removeFileAtPath:downloadDir handler:nil];

代码语言:javascript
复制
warning: 'removeFileAtPath:handler:' is deprecated [-Wdeprecated-declarations]

是否有if([… respondsToSelector:@selector(…)]){ … } else { … }的语法提示编译器(Clang)不警告该行?

如果不是,有没有一种方法可以标记要忽略-Wdeprecated-declarations

在看到一些答案之后,让我澄清一下,让编译器混淆成不知道我在做什么不是一个有效的解决方案。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-12-15 00:54:14

我在Clang编译器用户手册中找到了an example,它让我忽略了这个警告:

代码语言:javascript
复制
if ([fileManager respondsToSelector:@selector(removeItemAtPath:error:)]) {
    [fileManager removeItemAtPath:downloadDir error:NULL];
} else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
    [fileManager removeFileAtPath:downloadDir handler:nil];
#pragma clang diagnostic pop
}
票数 118
EN

Stack Overflow用户

发布于 2009-12-15 00:57:58

您可以声明一个单独的文件,该文件指定用于调用不推荐使用的方法,并在Xcode中设置每个文件的编译器标志以忽略-Wdeprecated-declarations。然后,您可以在该文件中定义一个伪函数来调用不推荐使用的方法,从而避免在真实的源文件中出现警告。

票数 8
EN

Stack Overflow用户

发布于 2009-12-15 01:35:29

我不确定clang是否足够智能地捕捉到这一点,但如果不是,您可以尝试使用performSelector:withObject:withObject:或构建并调用NSInvocation对象。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1902021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档