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?
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