0

デリゲートを使用し、設定されているセレクターに基づいてセレクターを呼び出すという、より一般的なアプローチを達成しようとしている特定のシナリオがあります。

たとえば、以下はコードです。

@protocol HttpRequestDelegate
@optional


- (void)testDrive:(NSData*)dataembedd;

@end


- (id)init {

    self = [super init]; 

    if (self) {

        //Initialize it here.
        self.HttpRequestdelegate = self;
    }

    return self;
}

HttpRequest *apiCaller = [[HttpRequest alloc] init];
        NSLog(@"%@",apiCaller.HttpRequestdelegate);
        [WLCC_ApiCaller executeAsync:apiCaller.HttpRequestdelegate :@selector(testDrive:) :[NSURL URLWithString:updateUrl] :wlcc_Get];

ただし、executeAsync 呼び出しでは、次のようなテスト ドライブであるセレクターを呼び出そうとしています。

[delegate performSelector:@selector(selector) withObject:responseData];

しかし、不明なセレクターのエラーが発生しますが、デリゲートの参照が初期化されたときと同じであることに気付いた場合。

別のクラスでデリゲート実行セレクターを利用しようとしていますが、ここで行う必要があること以外に何かありますか?

ありがとう。

4

2 に答える 2

0

そうあるべきだと思います。他の関数を実装しているように見え、デリゲートを継承していないその場所から呼び出そうとすると、その特定の関数の実装を見逃す可能性があります。

通常、デリゲートパターンが使用されるため、必要に応じて関数を実装できます(または、コールバックを提供すると言うこともできます)が、そのクラスはそのデリゲートに準拠する必要があります。チェックしましたか?

WLCC_ApiCaller executeAsyncなど、非常に多くの情報がカーテンの後ろにあると思うので、実装について詳しく説明してください。

于 2012-11-30T09:01:41.987 に答える
0

次のようにプロトコルを定義します。

@protocol HttpRequestDelegate <NSObject>

NSObjectクラスとNSObjectプロトコルがあります。すべてのプロトコルがプロトコルに準拠している必要がありNSObjectます。これにより、 などのメソッドが提供されますrespondsToSelector:

于 2012-11-30T07:19:38.390 に答える