2011-01-23 85 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)];