2016-07-13 1 views
2

У меня есть пользовательский 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. Любая идея, почему это не работает?

+1

Я исправил эту проблему. Я сделал кеш слишком маленьким для загружаемых изображений, поэтому кеш очищался, прежде чем я смог повторно использовать изображение. Чтобы проверить размер памяти, которую использует ваш кеш, используйте ** imageCache.memoryUsage **. – skymook

ответ

0

Я обнаружил, что мне нужно только увеличить размер кеша. Изображения, которые я загружал, были больше, чем я предсказывал, и кеш заполнялся слишком быстро, а затем очищался.

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

Вы можете увидеть заполнение кэша, если вы периодически использовать imageCache.memoryUsage.

Print('Image cache size = \(imageCache.memoryUsage)') 
Смежные вопросы