2017-06-05 32 views
0

我正在嘗試使用緩存異步下載圖像,並在Objective-C的tableviewcell中顯示。圖片來自網址。我使用NSSession編寫了API調用,並使用GCD進行後臺調用,但在這種情況下,圖像在滾動時再次下載。我只想下載一次圖像。如何使用緩存異步下載圖像並在Objective-C的tableviewcell中顯示?

//------------ using GCD --------- 
     if(![imageUrlString isKindOfClass:[NSNull class]]){ 

       dispatch_async(dispatch_get_global_queue(0,0), ^{ 
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrlString]]; 
        if (data == nil) 
         return; 
        dispatch_async(dispatch_get_main_queue(), ^{ 
         // WARNING: is the cell still using the same data by this point?? 
         cell.imageView.image = [UIImage imageWithData: data]; 
        }); 
       }); 
     } 
     //------------ using GCD ----- 

對於同樣的兌現是唯一的方式?如果是,請建議我如何實現這一目標。

+1

爲什麼不使用SDWebImage? (https://github.com/rs/SDWebImage) – foolishBoy

回答

0

在開發過程中,如果我們有適當的工具和庫,我們不會感到麻煩。因爲我們必須在這方面花費更多的時間。

SDWebimage是一個偉大的圖書館,以滿足您的要求。你不必考慮所有情況。它已經爲你完成了。

舉個例子:

imageView.sd_setImage(with: URL(string: "your domain name"), placeholderImage: UIImage(named: "placeholder.png")) 

你只需要編寫的cellForRowAtIndexPath此行。 :) 這個庫中還有很多功能。 快樂編碼。

+0

它在placeholderImage上提供的錯誤 – sss

+0

你讀過https://github.com/rs/SDWebImage/blob/master/Docs/HowToUse.md –

+0

你能爲此建議嗎?錯誤 - UIImageView sd_setImageWithURL:placeholderImage:]:無法識別的選擇器發送到實例 – sss

0

嘗試SDWedImage

[[SDWebImageManager sharedManager]downloadImageWithURL:[NSURL URLWithString:imageurl] options:0 progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { 
    cell.imageView.image = image; // if you want resize your image and any other operation can do here. 
     }]; 

OR

+0

其在placeholderImage – sss

+0

上給出錯誤,通過爲零。如果你不需要佔位符圖像。 – KKRocks

+0

獲取錯誤----- UIImageView sd_setImageWithURL:placeholderImage:]:無法識別的選擇器發送到實例----代碼----- [cell.imageView sd_setImageWithURL:[NSURL URLWithString:imageUrlString] placeholderImage:nil]; --- – sss