2016-05-28 31 views
1

有没有一种方法可以使用Firebase Storage SDK下载几个文件(图片)并实时缓存这些文件,因此在下载映像之后缓存会更新?Firebase - 下载少量文件

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

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

回答

3

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

同样,在下载时,您需要通过cachedResponseForRequest:来检查缓存的请求,如果它不存在,请执行下载(稍后将缓存该请求)。

长期来看,我们希望使这种行为对您开箱,但现在,你可以使用NSURLCache做到这一点:)

+0

如果你实现它,并有一个代码片段(在要点或这里),我很想看看你想出了什么:) –

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() 
    } 


}