2012-04-19 74 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