1

有没有办法使用 Firebase Storage SDK 下载几个文件(图像)并实时缓存这些文件,所以在下载图像后缓存会更新?

我还可以在另一个视图控制器中观察此缓存是否正在更新?

我不需要一个完整的答案,也许只是提示在哪里学习它。我搜索了 firebase 文档,找到了一些信息,但我完全不知道如何使用它。

4

2 回答 2

3

看看NSURLCache。基本上你要做的是,每次你将文件上传到 Firebase 存储时,你可以获得一个下载 URL 并下载它,然后storeCachedResponse:forRequest:在 URL 缓存中。由于此缓存是共享的,因此您甚至可以跨活动获取它。

同样,在下载时,您需要检查缓存的请求cachedResponseForRequest:,如果不存在,则执行下载(此时您缓存请求以备后用)。

从长远来看,我们希望开箱即用地为您启用此行为,但现在,您可以使用NSURLCache它来实现 :)

于 2016-05-29T00:37:03.177 回答
0

我仍然没有找到从 Firebase Storage SDK 中执行此操作的方法。这是我从 bhlvoong 教程中获得的一些代码,用于使用NSCache.

import UIKit

let imageCache = NSCache<AnyObject, AnyObject>()

extension UIImageView {

    func loadImageUsingCacheWithUrlString(urlString: String) {

        self.image = nil

        //check cache for image first
        if let cachedImage = imageCache.object(forKey: urlString as NSString) as? UIImage {
            self.image = cachedImage

            return
        }

        //otherwise fire off a new download
        let url = NSURL(string: urlString)
        URLSession.shared.dataTask(with: url as! URL, completionHandler: { (data, response, error) in

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

                return
            }

            DispatchQueue.main.async {
                if let downloadedImage = UIImage(data: data!) {
                    imageCache.setObject(downloadedImage, forKey: urlString as NSString)

                    self.image = downloadedImage
                }
            }


        }).resume()
    }


}
于 2016-11-12T22:14:10.997 回答