2016-05-31 5 views
2

Я не знаю, на данный момент, я не знаю, почему я получаю ноль каждый раз, когда пытаюсь получить. Я передаю правильные данные изображения и идентификатор. Вот небольшой фрагмент кодаПочему мои изображения не кэшируются в AlamofireImage?

let photoCache = AutoPurgingImageCache(
     memoryCapacity: 100 * 1024 * 1024, 
     preferredMemoryUsageAfterPurge: 60 * 1024 * 1024 
    ) 

func cacheImage(image: Image, urlString: String) { 

     print("Image size: \(image.size) and string as identifier: \(urlString)") 



     self.photoCache.addImage(image, withIdentifier: urlString) 
    } 

    func cachedImage(urlString: String) -> Image? { 

     print("What is url? : \(urlString)") 

     print("What we are actually returning? : \(self.photoCache.imageWithIdentifier(urlString))") 

     return self.photoCache.imageWithIdentifier(urlString) 
    } 

печати для функции cacheImage: Размер изображения: (2826,0, 3722,0) и строка в качестве идентификатора: HTTP: www.somelink.com/DT199.jpg

печати для cachedImage когда это Я пытаюсь получить его: что такое URL? : http: www.somelink.com/DT199.jpg То, что мы на самом деле возвращаем, это: nil

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

Позже, я попробовал использовать диспетчер загрузки, и ничего не случилось до сих пор невежественным. Если кто-нибудь может мне помочь? Вот код

let imageDownloader = ImageDownloader(
      configuration: ImageDownloader.defaultURLSessionConfiguration(), 
      downloadPrioritization: .FIFO, 
      maximumActiveDownloads: 15, 
      imageCache: AutoPurgingImageCache() 
     ) 


     let downloader = imageDownloader 


     Alamofire.request(.GET, request, headers: headers) 
      .responseJSON { response in 

     if let JSON = response.result.value { 

     self.imagesArray = NSMutableArray() 
     self.imagesArray = JSON["results"] as! NSMutableArray 

      for results in self.imagesArray{ 

      let URLRequest = NSURLRequest(URL: NSURL(string:results["url"] as! String)!) 

      downloader.downloadImage(URLRequest: URLRequest, filter: nil, completion: { response in 

       if response.response?.statusCode == 200{ 

        print("In the house fetching url: \(results["url"] as! String)") 

        let image = response.result.value 
        print("Size of image: \(image?.size)") 
        let returnValue = downloader.imageCache?.addImage(image!, withIdentifier: results["url"] as! String) 
        print("return status: \(returnValue)") 

        if results .isEqual(self.imagesArray.lastObject){ 
         self.activityIndicatorView.stopAnimating() 
         self.activityIndicatorView.hidden = true 

         let fic = self.imagesArray.firstObject 
         print("getting image for this url : \(fic!["url"] as! String)") 

         var imageC = UIImage() 
         imageC = (downloader.imageCache?.imageWithIdentifier(fic!["url"] as! String))! 
         self.ssImage.image = imageC 
         print("Image : \(imageC.size))") 

        } 


       } 


      }) 


     } 




     } 
     } 

ответ

1

Может быть, вы должны инициализировать imageDownloader с photoCache вы использовали до кэшировать изображения вручную. AutoPurgingImageCache не является общим экземпляром. Только расширение UIImageView + AlamofireImage.swift имеет af_sharedImageDownloader, который поддерживает один AutoPurgingImageCache.

В зависимости от вашего примера кода он должен выглядеть следующим образом:

let imageDownloader = ImageDownloader(
      configuration: ImageDownloader.defaultURLSessionConfiguration(), 
      downloadPrioritization: .FIFO, 
      maximumActiveDownloads: 15, 
      imageCache: self.photoCache 
     ) 
Смежные вопросы