4

ASIHTTPRequest を使用してデータを取得していますが、リクエストをキャンセルするにはどうすればよいですか?? 私はちょうどこのようにコードを行います..

-(void) serachData{
   NSURL *url= [NSURL URLWithString:self.safestring];
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    [request setTimeOutSeconds:7200];
    [request setDelegate:self];
    [request startAsynchronous];
}

 - (NSMutableDictionary *)requestFinished:(ASIHTTPRequest *)request
 {
   NSLog(@"requestFinished");
    NSString *responseString = [request responseString];
    SBJsonParser *json = [[SBJsonParser alloc] init];
    NSMutableArray *array = [[NSMutableArray alloc] initWithObjects[jsonobjectWithString:responseString], nil];
     NSLog(@"array %@",array);
  }

  - (void)requestFailed:(ASIHTTPRequest *)request{
 NSLog(@"requestFailed");
 }

//キャンセル ボタンを押すと (requestFinished /requestFailed メソッドが処理中の場合)、ASIHTTPRequest は失敗し、メソッドを終了します Stop /abort! どうやってこれを行うのですか??

 -(IBAction)CancleREquest:(id)sender{
NSLog(@"CancleREquest");
   }
4

3 に答える 3

9

次に、特定のASIHTTPRequestをキャンセルします。

if(![yourASIHTTPRequest isCancelled]) 
{
    // Cancels an asynchronous request
    [yourASIHTTPRequest cancel];
    // Cancels an asynchronous request, clearing all delegates and blocks first
    [yourASIHTTPRequest clearDelegatesAndCancel];
}

注:すべてのASIHTTPRequestをキャンセルする には、次のようにします。

for (ASIHTTPRequest *request in ASIHTTPRequest.sharedQueue.operations)
{
  if(![request isCancelled]) 
  {
     [request cancel];
     [request setDelegate:nil];
  }
}

編集:2011年3月以降更新されていないため、非推奨のAFNetworkingを使用してください。ASIHTTPRequest

于 2012-05-28T07:18:53.310 に答える
6

素敵なシンプルバージョン:

for (ASIHTTPRequest *request in ASIHTTPRequest.sharedQueue.operations){
    [request cancel];
    [request setDelegate:nil];
}
于 2012-11-20T10:31:49.687 に答える
1

コントローラーの ivar/property で保留中のリクエストへの参照を保持し、cancelボタン ハンドラーからそれにメッセージを送信することをお勧めします。

//-- in your  class interface:
@property (nonatomic, assign) ASIFormDataRequest *request;

....

//-- in your  class implementation:
@synthesize request;

.....

-(void) serachData{
   NSURL *url= [NSURL URLWithString:self.safestring];
   self.request = [ASIFormDataRequest requestWithURL:url];
   [self.request setTimeOutSeconds:7200];
   [self.request setDelegate:self];
   [self.request startAsynchronous];
}

-(IBAction)CancleREquest:(id)sender{
   [self.request cancel];
   NSLog(@"request Canceled");
}

ただし、キャンセルする際にはいくつかのオプションがあります。ASIHTTPRequest ドキュメントから:

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

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

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

            // Cancels an asynchronous request
            [request cancel]

            // Cancels an asynchronous request, clearing all delegates and blocks first
            [request clearDelegatesAndCancel];
于 2012-05-28T07:14:10.197 に答える