У меня есть пользовательский UICollectionViewCell
, который получает изображение с помощью AlamofireImage (2.4). Он загружает ОК, но, похоже, он не кладет в кеш.AlamofireImage Collection cell помещает изображение в AutoPurgingImageCache после загрузки
У меня есть быстрый файл с моим глобальным кешем.
import Foundation
import Alamofire
import AlamofireImage
// AlamofireImage cache with 30 MB cache
let imageCache = AutoPurgingImageCache(
memoryCapacity: 30 * 1024 * 1024,
preferredMemoryUsageAfterPurge: 20 * 1024 * 1024
)
Узел коллекции выглядит следующим образом. Он загружает изображение с af_setImageWithURL
и в обратном вызове помещает это изображение в глобальный кеш после его установки в ячейку.
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!)
}
}
)
}
}
}
Изображение наборы в клетке, то print("response.result.isSuccess \(self.imageURL!)")
пожаров (поэтому обратный вызов работает), но print("image from cache")
никогда не срабатывает. imageCache.imageWithIdentifier(imageURL!)
всегда nil
. Он просто загружает изображение снова, когда я снова загружаю эту ячейку, используя тот же URL. Любая идея, почему это не работает?
Я исправил эту проблему. Я сделал кеш слишком маленьким для загружаемых изображений, поэтому кеш очищался, прежде чем я смог повторно использовать изображение. Чтобы проверить размер памяти, которую использует ваш кеш, используйте ** imageCache.memoryUsage **. – skymook