2012-04-25 64 views
1

我已經從網址下載信息,我發送這個網址作爲NSOperation在一個NSOperationQueue,我想知道,我如何刪除特定的NSOperation下載數據爲一個特定的網址,現在我做了這種方式:取消NSOperation從NSOperationQueue

AppDelegate *appController = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 

    for (NSOperation *op in appController.seriesQueue.operations) { 

     if ([op isKindOfClass:[MyDowndload class]]) { 

      MyDownload *urlInDownload = (MyDowndload *)op; 

      if ([urlInDownload.myNew.urlName isEqualToString:[managedObject valueForKey:@"urlName"]] && [urlInDownload.myNew.language isEqualToString:[managedObject valueForKey:@"language"]]) { 
       [op cancel]; 
      } 
     } 
    } 

我有一個tableview中的信息,所以當我刪除索引路徑的行我在單向進入,並在同時進入[OP取消]行,但我可以看到在線程仍在下載的控制檯日誌中,如何停止並刪除它?

+0

'url.myNew.language'在如果條件。這樣對嗎?或'urlInDownload.myNew.language'? – Ilanchezhian 2012-04-25 10:24:38

+0

我正確的,這只是一個錯誤粘貼在這裏,但在我的代碼我寫對了......你知道我可以解決這個問題嗎? – Piero 2012-04-25 10:26:36

回答

8

據蘋果方針,取消操作不會立即強制停止它在做什麼。雖然尊重由isCancelled返回的值是所有操作的預期,但您的代碼必須顯式檢查此方法返回的值並根據需要中止。

Justin建議建議....這是根據需要中止執行方法的方法。

- (void)main 
{ \\ ...do work... 
    if (self.isCancelled) 
     { \\ ...get out... } 
} 

NSOperation Class Reference by apple

+1

+1一個簡單的例子會很有用:MONOperation - ' - (void)main {\ n ...做工... \ n if(self.isCancelled){\ n ... get out ... \ n} \ n ... \ n} \ n'。 – justin 2012-04-25 10:44:59

+0

謝謝,我把一些self.isCancelled國旗在NSOperation檢查下載一段時間,現在工作:) – Piero 2012-04-25 10:58:50

+0

有一種方法可以暫停隊列中的所有操作? – Piero 2012-04-25 10:59:51

0

要停止下載請求操作,您需要終止/停止該請求的runloop。

要找到操作隊列中的特定操作,我認爲上述操作是允許的簡單操作。

,如果你需要更多的控制,

創建的NSOperation和使用標籤的每個操作一個子類,這樣就可以通過獨特的標籤檢查快速查找特定的操作。

並將自定義KVO放入操作的子類中,以便在需要時立即清除操作。 我的意思是覆蓋該線程的啓動方法。

感謝,

納文珊

+0

我已經子類化了nsoperation,MyDownload類是NSOperation的子類,並且所有的工作權利,當我嘗試取消它時,我在if語句中輸入,並執行[op取消];但不工作...並且url名稱是我用於標記的nsoperation子類的屬性... – Piero 2012-04-25 10:35:55

+0

整數檢查比字符串比較更快。只需重寫取消方法並嘗試停止runloop。 – 2012-04-25 10:51:21

+0

使用這個KVO,[self willChangeValueForKey:@「isCancelled」]; _isCancelled = YES; [self didChangeValueForKey:@「isCancelled」]; – 2012-04-25 10:53:27

相關問題