2016-09-11 2 views
-2

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

let imageCache = NSCache() 

extension UIImageView { 

    func loadImageUsingCacheWithUrlString(urlString: String) { 

     self.image = nil 

     //check cache for image first 
     if let cachedImage = imageCache.objectForKey(urlString) as? UIImage { 
      self.image = cachedImage 
      return 
     } 

     //otherwise fire off a new download 
     let url = NSURL(string: urlString) 
     NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) in 

      //download hit an error so lets return out 
      if error != nil { 
       print(error) 
       return 
      } 

      dispatch_async(dispatch_get_main_queue(), { 

       if let downloadedImage = UIImage(data: data!) { 
        imageCache.setObject(downloadedImage, forKey: urlString) 

        self.image = downloadedImage 
       } 
      }) 

     }).resume() 
    } 
} 

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

+0

Почему люди голодают это? –

+0

Вы хотите, чтобы изображения были сохранены на вашем устройстве, поэтому, если вы закрываете и повторно открываете свое приложение, у вас есть изображения без их повторной загрузки? –

+0

Да, я хочу, чтобы он кэшировал изображения, чтобы таблица плавно прокручивалась. Также я надеялся, что это сделает их доступными в автономном режиме. –

ответ

0

Хорошо, извините, если это был плохой вопрос. Это то, что окончательно сработало:

var imageCache = NSMutableDictionary() 

extension UIImageView { 

    func loadImageUsingCacheWithUrlString(urlString: String) { 

     self.image = nil 

     if let img = imageCache.valueForKey(urlString) as? UIImage{ 
      self.image = img 
     } 
     else{ 
      let session = NSURLSession.sharedSession() 
      let task = session.dataTaskWithURL(NSURL(string: urlString)!, completionHandler: { (data, response, error) -> Void in 

       if(error == nil){ 

        if let img = UIImage(data: data!) { 
         imageCache.setValue(img, forKey: urlString) // Image saved for cache 
         dispatch_async(dispatch_get_main_queue(), {() -> Void in 
         self.image = img 
        }) 
        } 


       } 
      }) 
      task.resume() 
     } 
    } 
} 

Наверное, у меня было что-то не в порядке или что-то в этом роде.

Смежные вопросы