使用正式协议时,删除“NSObject可能无法响应选择器”警告?

时间:2011-09-21 21:30:33

标签: objective-c xcode

我正在尝试编写一个自定义的正式协议,我遇到了Xcode警告的问题。具体做法是:

if([self.delegate conformsToProtocol:@protocol(myProtocol)]){
    [self.delegate myProtocolMethod];
}

这在运行时完全正常,但Xcode一直给我“NSObject可能不响应-myProtocolMethod”警告。我真的想删除警告,所以我在这里做错了吗?

2 个答案:

答案 0 :(得分:5)

编译器不关心您是否只是检查了协议。它只关心您调用方法的对象的数据类型。最简单的方法是将self.delegate的结果转换为声明协议的类型。

if([self.delegate conformsToProtocol:@protocol(myProtocol)]) {
    [(NSObject * <myProtocol>)self.delegate myProtocolMethod];
}

或者,如果委托属性应该始终实现此协议,则可以更改属性声明以包含它。这甚至更好,因为如果您尝试将未实现协议的对象分配为委托,编译器将发出警告。

@property (modifiers) NSObject * <myProtocol> delegate;

答案 1 :(得分:3)

您正在看警告,因为self.delegate的类型,无论它是什么,都不会声明该方法。

self.delegate投射到正确的类或协议以删除警告。 E.g:

[(id<myProtocol>)self.delegate myProtocolMethod];
相关问题