2017-04-04 54 views
2

我使用this tutorial将数据添加到Firebase。它完美的作品。由于快照和持久性,它也可以离线工作。Firebase存储图像在Swift 3中的持久性

我还将图片添加到this link的Firebase存储中。这也适用,但不适用于持久性。我试图从数据复制快照(第一个教程)来做到这一点,但FIRStorageReference没有快照选项,据我所知。我怎样才能做到这一点?

import Foundation 
import Firebase 
import FirebaseStorage 

struct MenuItemImage { 

let image: NSData 
let ref: FIRStorageReference? 
let key: String 



init(image: NSData, key: String = "") { 
    self.key = key 
    self.image = image 
    self.ref = nil 

} 

init(snapshot: FIRDataSnapshot) { // this should be something like FIRStoreSnapshot 
    key = snapshot.key 
    let snapshotValue = snapshot.value as! [String: AnyObject] 
    image = snapshotValue["image"] as! NSData 
    ref = snapshot.ref // errors as cannot assign value of tupe FIRDatabaseReference to type FIRStorageReference 
} 

func toAnyObject() -> Any { 
    return [ 
     "image": image 
    ] 
} 

} 
+0

你能详细说明你的意思是“图像持久性”吗? –

+0

当然,对于正常的数据(字符串),我使用的代码创建了一个数组,即使设备处于脱机状态,该数组仍会保存字符串。 Firebase的行为与NSUserDefaults或Core数据类似。没有任何真正的设置。但是,图片存储在Firebase的其他区域,因此当设备处于脱机状态时,字符串仍然显示,但图像消失(阵列为空) – ThundercatChris

+1

Firebase存储和Firebase数据库是两种不同的产品。 Firebase数据库SDK可以为您处理磁盘持久性。 Firebase存储SDK不支持。要缓存从Firebase存储获得的图片,您通常会使用第三方库。看到任何这些:http://stackoverflow.com/search?q=%5Bfirebase-storage%5D%5Bios%5D+cache+images –

回答

1

使用FirebaseUI /存储快照:添加到您的Podfile

pod 'FirebaseUI/Storage' 

然后,在你的代码,以显示和缓存的图像做:

import FirebaseStorageUI 

let imgRef = Storage.storage().reference().child("images/\(blah)") 
myImageView.sd_setImage(with: imgRef)) 

就是这样!如果使用相同的参考,图像将在后台获取,并在下次缓存。