5

現在、API呼び出しを処理するためにASIHTTPを実装するビューコントローラーがあります。

私のビューコントローラーは2つの別々の呼び出しを起動します。-requestFinished(ASIHTTPRequest *)requestメソッドの2つの呼び出しを区別できる必要があるので、それに応じてそれぞれを解析できます...

これを行うことはありますか?

4

4 に答える 4

9

userInfoフィールドを使用してください!それが目的です!

ASIHTTPRequest(またはASIFormDataRequest)オブジェクトには、.userInfoというプロパティがあり、必要なものを含むNSDictionaryを取得できます。だから私はほとんどいつも行きます:

- (void) viewDidLoad { // or wherever
    ASIHTTPRequest *req = [ASIHTTPRequest requestWithUrl:theUrl];
    req.delegate = self;
    req.userInfo = [NSDictionary dictionaryWithObject:@"initialRequest" forKey:@"type"];
    [req startAsynchronous];
}

- (void)requestFinished:(ASIHTTPRequest *)request
{
    if ([[request.userInfo valueForKey:@"type"] isEqualToString:@"initialRequest"]) {
        // I know it's my "initialRequest" .req and not some other one!
        // In here I might parse my JSON that the server replied with, 
        // assemble image URLs, and request them, with a userInfo
        // field containing a dictionary with @"image" for the @"type", for instance.
    }
}

@"type"このViewControllerで行うさまざまなASIHTTPRequestのキーにあるオブジェクトに異なる値を設定すると、オブジェクトを区別して-requestFinished:、それぞれを適切に処理できるようになります。

あなたが本当に空想なら、リクエストが終了したときに役立つ他のデータを持ち運ぶことができます。たとえば、画像を遅延読み込みする場合は、入力するUIImageViewへのハンドルを自分に渡して-requestFinished、画像データを読み込んだ後にそれを行うことができます。

于 2010-09-23T17:50:04.730 に答える
1

requestメソッドに渡されたパラメーターを調べてrequestFinished:(ASIHTTPRequest *)request、2つの呼び出しを区別できます。

たとえば、2つの呼び出しのURLが異なる場合は、request.urlプロパティを調べて2つの要求を区別できます。

于 2010-09-23T17:17:46.003 に答える
1

リクエストの作成時に呼び出す必要のある適切なセレクターを設定できます。

[request setDelegate: self];
[request setDidFailSelector: @selector(apiCallDidFail:)];
[request setDidFinishSelector: @selector(apiCallDidFinish:)];

呼び出しごとに異なるセレクターを設定するだけです

于 2010-09-23T21:36:22.553 に答える
0

url / originalUrlプロパティを確認するか、サブクラス化して独自のプロパティを追加し、文字列よりもintを比較する方が簡単/高速であるため、呼び出しの方法を示すことができます。

すなわち

myRequest.callType = FACEBOOK_LOGIN;

私は次のような列挙型のすべての呼び出しを持っています:

enum calls {
FACEBOOK_LOGIN = 101,
FACEBOOK_GETWALL = 102,
...
}
于 2010-09-23T17:24:28.827 に答える