2012-11-08 35 views
0

我使用ASIHTTPRequest(我知道,我知道,它沒有被維護 - 沒關係;它的工作原理和它是我的應用程序構建的)運行通過ASINetworkQueue發送一系列HTTP請求。ASINHTTPRequest in ASINetworkQueue:隊列運行時取消請求

問題是我的隊列會有很多請求(數千個),並且需要一段時間才能運行。在它運行的時候,應用程序中的一些數據可能已經改變,這會使一些請求不必要。我希望在運行之前對每個請求運行一個驗證方法,如果驗證方法沒有檢出,那麼它將取消該請求並繼續下一個請求。

現在,我使用下面的代碼創建我ASIHTTPRequests:

ASINetworkQueue *myQueue = [ASINetworkQueue queue]; 
NSURL *URL = [NSURL URLWithString:@"http://mywebsite.com"]; 
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
[request setStartedBlock:^{ 
    NSLog(@"Request started: %@", request.url.absoluteString); 
}]; 
[request setCompletionBlock:^{ 
    NSLog(@"Request completed: %@", request.url.absoluteString); 
    // do some code here to clean up since it's finished 
}]; 
[myQueue addOperation:request]; 

我現在的想法是把東西放到了startedBlock,所以它會做:

[request setStartedBlock:^{ 
    NSLog(@"Request started"); 
    if (![self myValidationMethod]) { 
     [request cancel]; // <---------- 
    } 
}]; 

然而,當我這樣做,我從Xcode獲得以下警告: 「在此塊中強烈捕獲'請求'可能會導致保留週期。」

首先,這是要做到這一點的正確方法嗎?我似乎無法找到一種方法來從ASINetworkQueue中刪除特定的ASIHTTPRequest。其次,Xcode的這個警告是我需要擔心的嗎?

+0

ans在這裏: http://stackoverflow.com/questions/8859649/asihttprequest-asiformdatarequest-referencing-request-object-within-blocks-u/ 8874812#8874812 –

回答

0

關於你捕捉塊「容器」,形成一個循環的警告......只是說:

__weak ASIHTTPRequest *rw = request; 

和使用,在該塊。

至於啓動塊的方法。並不完美,但我不知道更好的方法...