有沒有一種方法可以使用Firebase Storage SDK下載幾個文件(圖片)並實時緩存這些文件,因此在下載映像之後緩存會更新?Firebase - 下載少量文件
我還可以在另一個視圖控制器中觀察正在更新的此緩存嗎?
我不需要一個完整的答案,只是一個提示在哪裏學習它。我搜索了firebase文檔,發現了一些信息,但我完全不知道如何使用它。
有沒有一種方法可以使用Firebase Storage SDK下載幾個文件(圖片)並實時緩存這些文件,因此在下載映像之後緩存會更新?Firebase - 下載少量文件
我還可以在另一個視圖控制器中觀察正在更新的此緩存嗎?
我不需要一個完整的答案,只是一個提示在哪裏學習它。我搜索了firebase文檔,發現了一些信息,但我完全不知道如何使用它。
看看NSURLCache
。基本上,您要做的是,每次將文件上傳到Firebase存儲時,都可以獲取下載URL並將其下載到URL緩存中,然後storeCachedResponse:forRequest:
。由於這個緩存是共享的,您甚至可以跨活動抓取它。
同樣,在下載時,您需要通過cachedResponseForRequest:
來檢查緩存的請求,如果它不存在,請執行下載(稍後將緩存該請求)。
長期來看,我們希望使這種行爲對您開箱,但現在,你可以使用NSURLCache
做到這一點:)
我還沒有找到一種方法做這來自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()
}
}
如果你實現它,並有一個代碼片段(在要點或這裏),我很想看看你想出了什麼:) –