現在、API呼び出しを処理するためにASIHTTPを実装するビューコントローラーがあります。
私のビューコントローラーは2つの別々の呼び出しを起動します。-requestFinished(ASIHTTPRequest *)requestメソッドの2つの呼び出しを区別できる必要があるので、それに応じてそれぞれを解析できます...
これを行うことはありますか?
現在、API呼び出しを処理するためにASIHTTPを実装するビューコントローラーがあります。
私のビューコントローラーは2つの別々の呼び出しを起動します。-requestFinished(ASIHTTPRequest *)requestメソッドの2つの呼び出しを区別できる必要があるので、それに応じてそれぞれを解析できます...
これを行うことはありますか?
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
、画像データを読み込んだ後にそれを行うことができます。
request
メソッドに渡されたパラメーターを調べてrequestFinished:(ASIHTTPRequest *)request
、2つの呼び出しを区別できます。
たとえば、2つの呼び出しのURLが異なる場合は、request.url
プロパティを調べて2つの要求を区別できます。
リクエストの作成時に呼び出す必要のある適切なセレクターを設定できます。
[request setDelegate: self];
[request setDidFailSelector: @selector(apiCallDidFail:)];
[request setDidFinishSelector: @selector(apiCallDidFinish:)];
呼び出しごとに異なるセレクターを設定するだけです
url / originalUrlプロパティを確認するか、サブクラス化して独自のプロパティを追加し、文字列よりもintを比較する方が簡単/高速であるため、呼び出しの方法を示すことができます。
すなわち
myRequest.callType = FACEBOOK_LOGIN;
私は次のような列挙型のすべての呼び出しを持っています:
enum calls {
FACEBOOK_LOGIN = 101,
FACEBOOK_GETWALL = 102,
...
}