2011-11-08 12 views
1

、私はのような非公共のプロトコルを使用している場合:オプションのプロトコルメソッドのパラメータをタイプすることは可能ですか? iOS4をオン

@protocol HTTPDelegate <NSObject> 
@optional 
- (void) methodDidFinish:(NSDictionary *) response; 
- (void) methodDidFail:(NSString *) error; 
@end 

そして、私のようなデリゲートへのポインタがあります。

その後
id<HTTPDelegate> delegate; 

を、私はそのデリゲートメソッドを呼び出す任意にしたいです:

if([delegate respondsToSelector:@selector(methodDidFail:)]) { 
    [delegate methodDidFail:errorString]; 
} 

これは素晴らしいです。私がチェックしたときに、コンパイラは文句を言わないだろう、私はちょうど、オプションのプロトコルメソッド内の1つのパラメータの種類を変更した場合

@protocol HTTPDelegate <NSObject> 
@optional 
- (void) methodDidFinish:(NSDictionary *) response; 
- (void) methodDidFail:(NSError *) error; 
@end 

:しかし、私は後でエラーのためにNSError *を使用してのプロトコルを変更することを決定します(with respondsToSelector :)デリゲートがそのメソッドを実装していて、methodDidFail:メッセージとともにerrorStringを渡すことができます。代わりに、後で、実行時に無効なセレクタクラッシュが発生します。

コンパイラがパラメータのタイプに不満を持ち、チェックする場合はどうすればよいですか?それを行う方法はありますか?

答えて

1

いいえいいえパラメータの種類を確認する方法はありません。タイプを変更するときに、新しいメソッドを追加する方が良いでしょう。私はデリゲートメソッドの名前を次のように指定します:

- (void) methodDidFailWithError:(NSError *) error; 

- (void) methodDidFailWithString:(NSString *) errorString; 
+0

これは回避策として受け入れられますが、これは私が望んでいたものではありません。 – Christian

+0

'didFailWithErrorMessage'が良いでしょう。 – Sulthan

関連する問題