我想在NSObject实例上使用 Select 器,以满足实现协议的需要.例如,有一个category方法,如果调用它的NSObject实例支持它,它应该设置一个error属性.这是代码,代码按预期工作:

if ([self respondsToSelector:@selector(setError:)])
{
    [self performSelector:@selector(setError:) withObject:[NSError errorWithDomain:@"SomeDomain" code:1 userInfo:nil]];
}

但是,编译器没有看到任何带有setError:signature的方法,因此对于包含@selector(setError:)个代码段的每一行,它都会给我一个警告:

Undeclared selector 'setError:'

我不希望必须声明一个协议来消除这个警告,因为我不希望所有可能使用它的类都实现任何特殊的功能.按照惯例,我希望他们有setError:个方法或属性.

这可行吗?怎样

干杯,

推荐答案

另一个选项是通过以下方式禁用警告:

#pragma GCC diagnostic ignored "-Wundeclared-selector"

你可以把这条线放在.出现警告的m文件.

Update:

它也适用于LLVM,如下所示:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"

... your code here ...

#pragma clang diagnostic pop

Objective-c相关问答推荐

[NSNull new]和[NSNull NULL]有什么不同?

恢复 iOS7 之前的 UINavigationController pushViewController 动画

跨平台 iPhone/Android 代码共享

应用程序终止时处理推送通知

使用自动布局自定义纵横比

在 iOS8 上,以横向模式显示我的应用程序会隐藏状态栏,但在 iOS 7 上,状态栏会同时显示在两个方向上

将 CSS 插入 UIWebView / WKWebView 中加载的 HTML

将 NSNumber 转换为 NSDecimalNumber

防止其他程序员调用 -init 的最佳方法

dispatch_get_global_queue 和 dispatch_queue_create 有什么区别?

UIRefreshControl iOS 6 xcode

在 Objective-C 类中混合 C 函数

在 UILabel.attributedText *not* 蓝色和 *not* 下划线

如何以编程方式暂停 NSTimer?

通过 ObjC 类别覆盖方法并调用默认实现?

如何计算多边形的圆角?

如何在 Objective-C 中将 NSString 解析为 BOOL?

自定义 colored颜色 我的 UIActivityIndi​​catorView

发送通知到山狮通知中心

NSString 中子字符串的出现次数?