簡體   English   中英

取消要求Alamofire圖片的請求

[英]Cancel request for Alamofire image

基本信息:我有一個tableView,每個tableView單元格都包含一個圖像和幾個標簽 我使用tableView prefetch data方法進行API調用,以在tableView滾動時獲取數據。

問題:有時我看到一個特定的單元格顯示其他單元格的圖像 當我滾動速度比正常速度快一點時,就會發生這種情況。 注意:為了克服這個問題,我只需要向上/向下滾動tableView

嘗試過的事情:准備重用方法時,我將imageView設置為nil。

我得出的結論是:通過調試問題,我了解到,一旦看到一個單元格,便可以使用Alamofire Image發出圖像請求,但是在收到響應之前會對其進行滾動。 因此,可能發生的情況是,在接收到響應時,它正在為該單元格設置圖像,但是由於我正在重復使用這些單元格,因此該單元格不可見。 該單元格包含其他一些數據。

如果單元格不可見,請告訴我如何取消請求。 讓我知道我是否想回答問題。

發生這種情況是因為tableView重用了單元格,並且如果隊列中有圖像下載並且您滾動並且下載完成,它將顯示下載的圖像幾秒鍾,直到正確的圖像下載為止。

af_setImage方法中使用占位符。 它將解決您的問題

imageView.af_setImage(withURL: URL(string: img)!, placeholderImage: UIImage(named: "product_placeholder")

在這種情況下,我要做的是將單元格的標簽設置為匹配行號。

當圖像請求完成時,我檢查它是否仍具有相同的標簽(如果被重用,則標簽將被更改)。

cellForRowAt indexPath

cell.tag = indexPath.row
ImageService.shared.getImage(completion: { (image) in
  if let image = image, cell.tag == indexPath.row {
    //apply image
  }
}

這不會取消請求,但是如果單元格不再位於同一位置,它將忽略結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM