1

ASIHTTPRequest を使用して Web サーバーにリクエストを送信しています。それはすべて正常に動作します。しかし今、メソッドを呼び出すとgrabURLInBackground、指定された URL にリクエストが送信されます。

しかし今、メソッドでリクエストをキャンセルする必要があります (送信を停止し、URL からのコンテンツのダウンロードを停止するなど) viewWillDissapear。これどうやってするの ?ヘルプ

- (IBAction)grabURLInBackground:(id)sender
{
   NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
   ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setDelegate:self];
   [request startAsynchronous];
}

- (void)requestFinished:(ASIHTTPRequest *)request
{
   // Use when fetching text data
   NSString *responseString = [request responseString];

   // Use when fetching binary data
   NSData *responseData = [request responseData];
}

- (void)requestFailed:(ASIHTTPRequest *)request
{
   NSError *error = [request error];
}
4

3 に答える 3

3
for (ASIHTTPRequest *req in ASIHTTPRequest.sharedQueue.operations)
{
    [req cancel];
    [req setDelegate:nil];
}

これはそれをキャンセルする必要があります..

于 2012-04-19T15:46:06.533 に答える
2

できるよ:

[request cancel]

または:

[request clearDelegatesAndCancel];

ここのドキュメントでわかるように。

ビューを離れるときにキャンセルできるように、そのリクエストへの参照を保存することをお勧めします。

于 2012-04-19T15:42:11.153 に答える
2

ASIHttp docs から GOt thsi:

非同期リクエストのキャンセル

非同期リクエスト ([request startAsynchronous] で開始されたリクエスト、または作成したキューで実行中のリクエスト) をキャンセルするには、[request cancel] を呼び出します。同期リクエストはキャンセルできないことに注意してください。

リクエストをキャンセルすると、リクエストはそれをエラーとして扱い、デリゲートおよび/またはキューの失敗デリゲート メソッドを呼び出すことに注意してください。この動作が望ましくない場合は、キャンセルを呼び出す前にデリゲートを nil に設定するか、代わりに clearDelegatesAndCancel メソッドを使用してください。

// 非同期リクエストをキャンセルします

【キャンセル依頼】

// 非同期リクエストをキャンセルし、

最初にすべてのデリゲートとブロックをクリアする [request clearDelegatesAndCancel];ASINetworkQueue を使用する場合、キューの shouldCancelAllRequestsOnFailure が NO (デフォルトは YES) でない限り、個々のリクエストをキャンセルすると他のすべてのリクエストがキャンセルされます。

// このキューのリクエストが失敗またはキャンセルされた場合、他のリクエストは引き続き実行されます

[キュー setShouldCancelAllRequestsOnFailure:NO];

// キュー内のすべてのリクエストをキャンセルします

[cancelAllOperations をキューに入れる];

于 2012-04-19T15:47:09.760 に答える