2012-04-19 50 views
1

我正在使用ASIHTTPRequest向Web服务器发送请求。它一切正常。但现在,当我拨打grabURLInBackground方法时,会向给定的URL发送请求。取消ASIHTTPRequest - 初学者

但现在,我需要取消请求(如停止发送,并停止从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]; 
} 

回答

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

这应该取消它..

+0

我没有在'ASIHTTPRequest'中的'Queue'中使用我的应用程序。那么我可以使用你的代码吗? – user1315906 2012-04-19 15:49:47

+0

如果我在VIewDidDissapear或ViewDidUnload中使用它,有什么危险?我有一个标签栏控制器,所以当请求正在运行时,如果用户点击另一个栏,我需要取消请求。你认为如果使用你的代码解决它的理想吗? – user1315906 2012-04-19 16:04:10

+0

对不起,它应该是viewDidDisappear ... – 2012-04-19 16:05:51

2

你可以这样做:

[request cancel] 

或者:

[request clearDelegatesAndCancel]; 

由于可以在文档here中可以看出。

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

+0

您如何看待@ AnkitSrivastava的答案,它会取消请求而不必存储请求的引用? – user1315906 2012-04-19 15:51:37

+0

是的,这是一个很好的方法,那就是ASIHTTPRequest的所有运行请求的共享队列。除非您正在运行其他请求,只想取消该请求。 – 2012-04-19 15:53:22

+0

谢谢你的回答和回应肯定有帮助 – user1315906 2012-04-19 16:25:29

2

获得学校thsi从ASIHttp文档:

取消异步请求

要取消的异步请求(可能是被开始使用[请求的请求startAsynchronous]或在您创建的队列中运行的请求),请调用[请求取消]。请注意,您无法取消同步请求。

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

//取消异步请求

[请求取消]

//取消的异步请求,

清除第一所有代表和块 [请求clearDelegatesAndCancel];当使用ASINetworkQueue,除非队列的shouldCancelAllRequestsOnFailure为NO(缺省为YES),否则当您取消单个请求时,所有其他请求都将被取消。

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

[队列setShouldCancelAllRequestsOnFailure:NO];

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

[队列cancelAllOperations];

+0

“使用ASINetworkQueue时,除非队列的shouldCancelAllRequestsOnFailure为NO(缺省为YES),否则当您取消单个请求时,所有其他请求都将被取消。” - 这是至关重要的,我试图弄清楚为什么我所有的请求都在我取消之后被杀死。 – Echelon 2013-10-29 15:35:18