1

Firebase Storage SDK を使用していくつかのファイル (画像) をダウンロードし、それらのファイルをライブ キャッシュして、画像のダウンロード後にキャッシュを更新する方法はありますか?

このキャッシュが更新されていることを別のView Controllerで観察することはできますか?

完全な答えは必要ありません。おそらく、どこでそれを学ぶべきかのヒントです。私はfirebaseのドキュメントを検索し、いくつかの情報を見つけましたが、それを使用する方法がまったくわかりません.

4

2 に答える 2

3

をご覧くださいNSURLCache。基本的に、ファイルを Firebase Storage にアップロードするたびに、ダウンロード 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 に答える