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 文档中得到 thsi:

取消异步请求

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

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

// 取消一个异步请求

[请求取消]

// 取消异步请求,

首先清除所有委托和块 [request clearDelegatesAndCancel];当使用 ASINetworkQueue 时,当您取消单个请求时,所有其他请求都将被取消,除非队列的 shouldCancelAllRequestsOnFailure 为 NO(YES 为默认值)。

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

[队列集ShouldCancelAllRequestsOnFailure:NO];

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

[队列取消所有操作];

于 2012-04-19T15:47:09.760 回答