2012-02-08 85 views
0

以下代碼位於cellForRowAtIndexPath內。使用塊異步下載

1)我需要以某種方式修改此代碼,取消下載或當viewDissapears時的塊。我想,我應該首先初始化.h文件中的一個塊,然後在cellForRowAtIndexPath中使用它,然後在viewDidDissapear時將其設置爲零。 (我不確定這種方法是否正確)。有人可以幫我編輯這段代碼嗎?

注意:當用戶在特定的視圖上,以及下面的代碼下載一些圖像時,用戶決定移動到另一個視圖。然後我想取消下載在viewDidDissapear方法

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);  
    dispatch_async(concurrentQueue, ^{   
     NSData *image = // I will be downloading an URL here    
     //this will set the image when loading is finished 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      // I will be displaying the Downloaded image here 
     }); 
    }); 

回答

0

你不應該等待消失的觀點,並在表格視圖單元格的prepareForReuse方法取消操作。否則,您可能會在下載完成之前(例如,因爲用戶做了快速滾動)而看到單元被回收,然後在正確的內容覆蓋之前,完成的下載將顯示錯誤的內容。除此之外,您的方法看起來可行。

0

下載的內容已經是異步的,所以其包裝與GCD只是事情複雜化。這裏有一個可下載的項目,您可以嘗試下載,在後臺下載圖片,並在到達時將它們添加到表格視圖中。您可以輕鬆地添加取消當一個下載對象被釋放的下載代碼:

https://github.com/mattneub/Programming-iOS-4-Book-Examples/blob/master/p754p772downloader/p754downloader/RootViewController.m

+0

這是使用ASIHTTPRequest? – shajem 2012-02-11 19:11:39

+0

我不知道那是什麼。看代碼,你可以看到它的用途。這是一個完整的工作項目;所有的代碼都在那裏。沒有技巧。 – matt 2012-02-11 20:49:44