2010-09-11 64 views
1

有人知道一種以持久的方式從ASINetworkQueue中刪除請求的方法嗎?重置功能似乎沒有完成這項工作。我正在試圖做的是以下刪除所有來自ASINetWorkQueue的請求

- (void)fillAndRunQueue:(ASINetworkQueue*)queue requests:(NSArray*)requests { 
    for (ASIHTTPRequest* request in requests) { 
     if ([request check]) { // Valid request => add it to the queue  
      [queue addOperation:request]; 
     } else { // Invalid request => cancel immediatelly 
      // HOW TO REMOVE ALL PREVIOUS REQUESTS FROM THE QUEUE?? 
      return; 
     } 
    } 

    [queue go]; 
} 

回答

2

兩個明顯的選擇,我可以看到的是:

[queue cancelAllOperations]; 

,或者如果你想要更多的控制:

[request cancel]; 

爲每個請求你想「刪除」(這在技術上並不是將它們刪除,但可能對你的目的有足夠接近的效果)。

雖然,我認爲[queue reset];也應該可以工作 - 也許你可以解釋一下當你嘗試使用它時會發生什麼?

如果一切都失敗,釋放並重新創建隊列應該刪除所有內容。

更新

爲了進一步解釋,我不認爲這是可能實際上從一個NSOperationQueue刪除項目,只能取消。 (ASINetworkQueue是NSOperationQueue的一個子類)。

蘋果文檔是在這裏:

所有的

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSOperationQueue_class/Reference/Reference.html

+0

首先,感謝回答。 [隊列取消所有操作],[隊列重置]和[請求取消](針對每個請求)的問題是它們都保持隊列中請求的數量不變。我用[queue requestsCount]監視了後者,並且它始終保持不變。 – hennes 2010-09-11 18:55:21

+0

爲了更加清楚,我想要的是完全排隊。當然,發佈和重新創建隊列將是一個選擇,但我希望會有更優雅的方式。 – hennes 2010-09-11 18:59:21

+0

另一個解決方法是首先驗證所有請求,然後將它們一次添加到隊列中。但是,原始問題(如何通常從隊列中刪除請求)仍然存在。 – hennes 2010-09-11 19:36:42