取消ASIHTTPRequest - 初学者

时间:2012-04-19 15:39:58

标签: iphone objective-c cocoa-touch asihttprequest

我正在使用ASIHTTPRequest向Web服务器发送请求。一切正常。但现在,当我调用grabURLInBackground方法时,会向请求的URL发送请求。

但现在,我需要在viewWillDissapear方法中取消请求(如停止发送,并停止从URL下载内容)。我怎样才能做到这一点 ?帮助

- (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];
}

3 个答案:

答案 0 :(得分:3)

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

这应该取消..

答案 1 :(得分:2)

你可以这样做:

[request cancel]

或者:

[request clearDelegatesAndCancel];

从文档here中可以看出。

我建议存储对该请求的引用,以便您在离开视图时取消它。

答案 2 :(得分:2)

从ASIHttp docs开始:

取消异步请求

要取消异步请求(使用[request startAsynchronous]启动的请求或在您创建的队列中运行的请求),请调用[request cancel]。请注意,您无法取消同步请求。

请注意,当您取消请求时,请求会将其视为错误,并将调用您的委托和/或队列的失败委托方法。如果您不想要这种行为,请在调用cancel之前将委托设置为nil,或者使用clearDelegatesAndCancel方法。

//取消异步请求

[请求取消]

//取消异步请求,

首先清除所有代表和阻止 [request clearDelegatesAndCancel];当使用ASINetworkQueue时,除非队列的shouldCancelAllRequestsOnFailure为NO(YES是默认值),否则取消单个请求时将取消所有其他请求。

//当此队列中的请求失败或被取消时,其他请求将继续运行

[queue setShouldCancelAllRequestsOnFailure:NO];

//取消队列中的所有请求

[queue cancelAllOperations];