2011-01-23 86 views
1

我已经创建了一个类,这个类有它自己的委托协议。 内部的协议,还有一个可选的方法,声明如下iPhone - 如何知道协议方法是否已实现?

@protocol myClassDelegate <NSObject> 
@optional 
- (void) myOptionalMethod; 

@end 

课堂上,我不得不myOptionalMethod通话内部,在

[delegate myOptionalMethod]; 

的形式,但作为方法是可选的,如果我叫这个方法对一个没有实现该方法的委托,它会崩溃。

那么,如何在调用它之前测试该方法是否已实现?

谢谢。

回答

2

这是很容易的。

if([delegate respondsToSelector:myOptionalMethod]){ 
    // You can now call this method without a crash 
    [delegate myOptionalMethod]; 
} 
2

您应该使用respondsToSelector方法来确定委托在调用委托上的选择器之前是否具有相关的方法。

例如:

if([delegate respondsToSelector:@selector(myOptionalMethod)]) { 
    [delegate myOptionalMethod]; 
} 
+1

错字:“以确定是否删除” - >“以确定是否代表”。好的答案,否则。 – greggian 2011-01-23 22:16:15

+0

@Greg Gianforcaro感谢您的领导。 :-) – 2011-01-23 22:20:11

2

-respondsToSelector:是单独的方法很有用,因为其他人已经张贴在这里。对于严格的解释,你可以看到一个类是否被声明为实现一个协议与-conformsToProtocol:方法:

BOOL isAGrommet = [myObject conformsToProtocol: @protocol(Grommet)];