、私はのような非公共のプロトコルを使用している場合:オプションのプロトコルメソッドのパラメータをタイプすることは可能ですか? 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を渡すことができます。代わりに、後で、実行時に無効なセレクタクラッシュが発生します。
コンパイラがパラメータのタイプに不満を持ち、チェックする場合はどうすればよいですか?それを行う方法はありますか?
これは回避策として受け入れられますが、これは私が望んでいたものではありません。 – Christian
'didFailWithErrorMessage'が良いでしょう。 – Sulthan