0

私は次のことをしたい: 私は ASIFormDataRequest を作成しており、それが終了したら、新しいものを呼び出したい:

したがって、私のコードは次のようになります。

 ASIFormDataRequest *request=[ASIFormDataRequest requestWithURL:url];
    [request setDelegate:self];
    [request setPostValue:mail forKey:@"email"];
    [request setPostValue:cod forKey:@"code"];
    [request setPostValue:tab forKey:@"table"];
    [request setPostValue:name forKey:@"name"];
    [request startAsynchronous];

- (void)requestFinished:(ASIHTTPRequest *)request
{
   //request 1 is done, invoke request 2
 ASIFormDataRequest *request_2=[ASIFormDataRequest requestWithURL:url];
    [request_2 setDelegate:self];
    [request_2 setPostValue:other_data forKey:@"info"];
    [request_2 setPostValue:phone forKey:@"phone"];
    [request startAsynchronous];
}

そして、2 つのリクエストのどちらが終了したかを識別するために、requestFinished に何を配置する必要があるかわかりません。またはそうするための別の方法がある場合は?

4

4 に答える 4

2

ASIFormDataRequest は ASIHTTPRequest クラスを拡張したもので、NSInteger 型として「tag」プロパティを持ちます。

リクエストにさまざまなタグを設定でき、応答を受け取ったときにそのリクエストのタグを確認できます。

それはあなたがそれがどれであるかを特定します。

于 2012-09-16T10:06:44.067 に答える
2

さまざまなリクエストが終了したときに、さまざまなメソッドを呼び出すことができます。

ASIFormDataRequest *request=[ASIFormDataRequest requestWithURL:url];
[request setDelegate:self];
[request setDidFinishSelector:@selector(firstRequestFinished:)];

- (void)firstRequestFinished:(ASIHTTPRequest *)request
{
   //request 1 is done, invoke request 2
    ASIFormDataRequest *request_2=[ASIFormDataRequest requestWithURL:url];
    [request_2 setDelegate:self];
    // Work with your request, and then
    [request setDidFinishSelector:@selector(secondRequestFinished:)];
    [request startAsynchronous];
}

- (void)secondRequestFinished:(ASIHTTPRequest *)request
{
   //request 2 is done, invoke request 3
    ASIFormDataRequest *request_3=[ASIFormDataRequest requestWithURL:url];
    [request_3 setDelegate:self];
    // Work with your request, and then
    [request setDidFinishSelector:@selector(thirdRequestFinished:)];
    [request startAsynchronous];
}

- (void)thirdRequestFinished:(ASIHTTPRequest *)request
{
   // Do whatever should be done now.
}
于 2012-09-16T10:26:58.217 に答える
1

リクエストは順次実行されるため、最初のリクエストを開始するときにゼロに設定され、requestFinished.

追加:コードにもエラーがあります:前のリクエストを再開するのではなくrequestFinished、新しいリクエストを で開始する必要があります。[request_2 startAsynchronous];

于 2012-09-16T09:53:49.210 に答える
1

2 番目のリクエストが最初のリクエストの結果を使用しない場合は、すべてのリクエストをキューに入れることができます。

[self setNetworkQueue:[ASINetworkQueue queue]];
[[self networkQueue] setDelegate:self];
[[self networkQueue] setRequestDidFinishSelector:@selector(requestInQeuFinished:)];
[[self networkQueue] setRequestDidFailSelector:@selector(requestFailed:)];
[[self networkQueue] setQueueDidFinishSelector:@selector(queueFinished:)];

for (NSString *tmpDic in array) 
{
    ASIHTTPRequest *link= [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"link"]];
    [[self networkQueue] addOperation:request];
}

[[self networkQueue] go];

Martin Rの応答に加えて、[[self networkQueue] requestsCount] を使用して、RESTの要求数を取得できますrequestInQeuFinished:

于 2012-09-16T10:00:37.223 に答える