【问题标题】:Show cached image after relaunch of app with AlamofireImage使用 AlamofireImage 重新启动应用程序后显示缓存的图像
【发布时间】:2017-03-18 15:17:17
【问题描述】:

我对 Alamofire Image lib 有疑问。 我尝试下载图像,然后终止应用程序并关闭 wifi。因此,当我在没有连接的情况下启动我的应用程序但我的图像没有出现时,我希望看到图像(第一次缓存在商店中)。

我的代码在一个简单的 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
}   
}

提前感谢您的帮助。

亲切的问候,

【问题讨论】:

  • 您是否在调试控制台中看到任何错误/消息?
  • 我试过你的代码,它运行完美。尝试一次 info.plist 中的 App Transport 安全设置
  • 您好,首先感谢您的帮助,但它不起作用。当我杀死我的应用程序时,关闭设备连接并重新启动它,图像不会从缓存中显示。什么都没有出现。还有其他想法吗?我尝试了 App Transport 安全性,但没有任何改变。提前谢谢你,亲切的问候,
  • 有关信息,我的图像已下载并在“image_disk_cache”目录的“fsCachedData”子目录中可用。如何从代码中的 alamofire 图像中获取它?提前谢谢你。

标签: ios swift image caching alamofireimage


【解决方案1】:

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 库。在你的项目中使用这个库的三种方法:

  • 使用 CocoaPods
  • 使用迦太基
  • 通过将项目克隆到您的存储库中

谢谢你,祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 2021-01-09
    • 2016-11-02
    • 2018-02-19
    • 1970-01-01
    • 2018-02-26
    相关资源
    最近更新 更多