【问题标题】:Firebase Storage image persistence in Swift 3Swift 3 中的 Firebase 存储图像持久性
【发布时间】:2017-08-30 07:26:18
【问题描述】:

我使用this tutorial 将数据添加到 Firebase。它完美地工作。由于快照和持久性,它也可以离线工作。

我还从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
    ]
}

}

【问题讨论】:

  • 您能否详细说明“图像持久性”的含义?
  • 当然,对于普通数据(字符串),我使用的代码会创建一个数组,即使设备处于离线状态,该数组仍将保存字符串。 Firebase 的行为类似于 NSUserDefaults 或核心数据。没有任何实际设置。但是图像存储在 Firebase 的不同区域中,因此当设备离线时,字符串仍会出现,但图像已消失(数组为空)
  • Firebase 存储和 Firebase 数据库是两种不同的产品。 Firebase 数据库 SDK 可以为您处理磁盘持久性。 Firebase 存储 SDK 没有。要缓存从 Firebase Storage 获取的图像,您通常会使用第三方库。请参阅以下任何一项:stackoverflow.com/…
  • 是的,您需要缓存图像。您可以创建自己的缓存扩展。参考这个视频:youtu.be/GX4mcOOUrWQ

标签: image firebase swift3 persistence firebase-storage


【解决方案1】:

使用 FirebaseUI/Storage:添加到您的 Podfile

pod 'FirebaseUI/Storage'

然后,在您的代码中,显示和缓存图像:

import FirebaseStorageUI

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

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

【讨论】:

  • 很好的解决方案。这样我们就不需要先下载 firebase 存储 url,然后将此 url 与图像缓存库一起使用。
【解决方案2】:

Kingfisher 工作得非常好,谢谢,但是我现在确实遇到了一些问题,它现在速度很慢(请参阅单独的线程)

Kingfisher with Firebase storage slow to display images - swift 3

哦,我通过在结构中包含一个空白 imageURL 来修复快照,然后在图像保存到 FirebaseStorage 时写入它。这意味着该结构在带有 URL 的快照中返回

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2012-11-15
    • 2016-08-25
    • 1970-01-01
    相关资源
    最近更新 更多