2016-07-13 5 views
2

Ich habe eine benutzerdefinierte UICollectionViewCell, die ein Bild mit AlamofireImage (2.4) bekommt. Es lädt OK, aber es scheint nicht in den Cache zu setzen.AlamofireImage Collection Zelle setzt Bild in AutoPurgingImageCache nach dem Download

Ich habe eine schnelle Datei mit meinem globalen Cache.

import Foundation 
import Alamofire 
import AlamofireImage 

// AlamofireImage cache with 30 MB cache 
let imageCache = AutoPurgingImageCache(
    memoryCapacity: 30 * 1024 * 1024, 
    preferredMemoryUsageAfterPurge: 20 * 1024 * 1024 
) 

Die Sammlungszelle sieht so aus. Er lädt das Bild mit af_setImageWithURL herunter und legt dieses Bild im Callback nach dem Setzen in der Zelle in den globalen Cache.

import UIKit 
import Alamofire 
import AlamofireImage 

    class MyCatCell: UICollectionViewCell { 

    @IBOutlet weak var fancyImage: UIImageView! 

    var imageURL: String? 

    func configureCell(uri: String?) { 
     imageURL = uri 
     resetCell() 
     loadImage() 
    } 

    func resetCell() { 
     fancyImage.af_cancelImageRequest() 
     fancyImage.image = nil 
    } 

    func loadImage() { 
     guard imageURL != nil else { 
      return 
     } 
     if let image = imageCache.imageWithIdentifier(imageURL!) { 
      // set image from cache 
      print("image from cache") 
      fancyImage.image = image 
     } else { 
      // get image and cache it 
      let url = NSURL(string: imageURL!)! 
      fancyImage.af_setImageWithURL(
       url, 
       placeholderImage: nil, 
       filter: nil, 
       imageTransition: .CrossDissolve(0.5), 
       completion: { response in 
        if response.result.isSuccess { 
         print("response.result.isSuccess \(self.imageURL!)") 
         // store this in the image cache 
         imageCache.addImage(response.result.value!, withIdentifier: self.imageURL!) 
        } 
       } 
      ) 
     } 
    } 
} 

Die Bilder-Sets in der Zelle, die print("response.result.isSuccess \(self.imageURL!)") Feuer (so wird der Anruf läuft zurück), aber die print("image from cache") nie ausgelöst. imageCache.imageWithIdentifier(imageURL!) ist immer nil. Es lädt nur das Bild erneut, wenn ich diese Zelle erneut unter Verwendung derselben URL lade. Irgendeine Idee, warum das nicht funktioniert?

+1

Ich habe dieses Problem behoben. Ich habe den Cache zu klein für die Bilder gemacht, die heruntergeladen wurden, so dass der Cache gelöscht wurde, bevor ich das Bild wiederverwenden konnte. Verwenden Sie ** imageCache.memoryUsage **, um die Größe des von Ihrem Cache verwendeten Speichers zu überprüfen. – skymook

Antwort

0

Ich fand, dass ich nur die Größe des Caches größer machen musste. Die Bilder, die ich heruntergeladen habe, waren größer als ich vorhergesagt hatte, und der Cache füllte sich viel zu schnell auf und löschte dann.

// AlamofireImage cache with 60 MB cache 
let imageCache = AutoPurgingImageCache(
    memoryCapacity: 60 * 1024 * 1024, 
    preferredMemoryUsageAfterPurge: 20 * 1024 * 1024 
) 

können Sie sehen Ihre Cache füllt, wenn Sie regelmäßig imageCache.memoryUsage verwenden.

Print('Image cache size = \(imageCache.memoryUsage)') 
Verwandte Themen