2016-11-04 2 views
0

У меня проблема с Alamofire Image lib. Я пытаюсь загрузить изображение, а затем убить приложение и отключить Wi-Fi. Поэтому я ожидаю увидеть изображение (в кэше в первый раз), когда я запускаю приложение без подключения, но мое изображение не появляется.Показать кэшированное изображение после перезапуска приложения с помощью AlamofireImage

Вот мой код в простой UIViewController с одним UIImage и одним UIButton, которая позволяет обновить вид только для некоторых тестов:

import UIKit 
import AlamofireImage 

class ViewController: UIViewController { 

@IBOutlet weak var firstImage: UIImageView! 
@IBOutlet weak var descriptionLabel: UILabel! 

var imageCache: ImageRequestCache = AutoPurgingImageCache() 
let urlRequest = URLRequest(url: URL(string: "https://httpbin.org/image/jpeg")!) 

@IBAction func refreshView(_ sender: Any) { 
    self.requestFirstImage() 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    self.requestFirstImage() 
} 

func requestFirstImage() { 

    let downloader = self.diskImageDownloader() 
    downloader.download(self.urlRequest) { response in 
     if let image = response.result.value { 
      self.firstImage.image = image 
      // Add image to cache 
      self.imageCache.add(image, for: self.urlRequest, withIdentifier: "wolf") 
      self.descriptionLabel.text = "Image added to cache" 
     } 
    } 

    // If image is stored in cache show it 
    if let image = self.imageCache.image(for: self.urlRequest, withIdentifier: "wolf") { 
     self.firstImage.image = image 
     self.descriptionLabel.text = "Image showed from cache" 
    } else { 
     self.descriptionLabel.text = "Impossible to show image from cache" 
     // call image from disk here 
     ------> Here how read image which is located in alamofireimage_disk_cache subfolder of the app ? 
    } 

} 

func diskImageDownloader(diskSpaceMB: Int = 300) -> ImageDownloader { 

    let diskCapacity = diskSpaceMB * 1024 * 1024 
    let diskCache = URLCache(memoryCapacity: diskCapacity, diskCapacity: diskCapacity, diskPath: "alamofireimage_disk_cache") 
    let configuration = URLSessionConfiguration.default 
    configuration.urlCache = diskCache 
    let downloader = ImageDownloader(configuration: configuration) 
    UIImageView.af_sharedImageDownloader = downloader 

    return downloader 
} 
} 

Заранее спасибо за вашу помощь.

Уважением,

+0

Вы обнаружили ошибку или сообщение в консоли отладки? – Vinodh

+0

Я пробовал ваш код, он отлично работает. Попробуйте установить параметры безопасности приложения в файле info.plist – Vinodh

+0

Привет и сначала спасибо за вашу помощь, но это не работает. Когда я убью свое приложение, отключите соединение устройства и перезапустите его, изображение не будет показано в кеше. Ничего не появляется. Любая другая идея? Я пробовал безопасность на транспорте, но ничего не изменилось. Заранее благодарю вас, С уважением, –

ответ

0

SDWebImage сделал трюк. Когда я загружаю свое изображение в первый раз, а затем убиваю приложение. Если после этого я перезапустил его без Интернета, изображение будет показано.

Вот один пример:

import SDWebImage 

@IBOutlet weak var myImage: UIImageView!    
let imageURL = URL(string:"Replace by url of image") 

self.myImage.sd_setImage(with: imageURL!, placeholderImage:UIImage(named: "PlaceHolderImage")!) 

Для вашей информации «PlaceHolderImage» это название моего места держателя изображения в активах. Поэтому замените свое. Это изображение появится до/во время загрузки изображения.

Не забудьте установить SDWebImage lib. Три способа использования этой библиотеки в проекте:

  • с использованием CocoaPods
  • с использованием Карфагена
  • клонирования проекта в репозиторий

Спасибо и удачи.

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