【问题标题】:Value of type 'StorageMetadata' has no member 'downloadURL' in swift and firebase“StorageMetadata”类型的值在 swift 和 firebase 中没有成员“downloadURL”
【发布时间】:2020-04-29 15:19:12
【问题描述】:

我目前正在观看一段 youtube 视频,告诉我如何制作社交媒体应用。但是我在写代码的时候,遇到了这个函数的错误。这是一个非常烦人的错误,所以如果可以,请帮助我

func setupUser(userUid: String) {
    if let imageData = self.userImgView.image!.jpegData(compressionQuality: 0.2) {
        let imgUid = NSUUID().uuidString
        let metaData = StorageMetadata()
        Storage.storage().reference().child(imgUid).putData(imageData, metadata: metaData) { (metadata, error) in

            let downloadURL = metadata?.downloadURL()?.absoluteString

            let userData = [
                "username": self.usernameField.text!,
                "userImg": downloadURL!
                ] as [String : Any]

            Database.database().reference().child("users").child(userUid).setValue(userData)
            self.performSegue(withIdentifier: "toFeed", sender: nil)
        }
    }
}

此代码中发生错误...

 let downloadURL = metadata?.downloadURL()?.absoluteString

Stackoverflow 上还有其他类似的问题,但我尝试了所有这些问题,但出现了错误。你能帮我么。你能稍微编辑一下我的代码来修复它吗?请不要直接引导我查看文档。我试过了,但是没有用

【问题讨论】:

  • 我尝试了代码,但出现错误
  • 其他问题有什么问题?如:stackoverflow.com/questions/50448396/…。请编辑问题以非常具体地说明为什么这个问题与其他问题不同。
  • 我的代码不一样
  • 好吧我编辑问题
  • 您的代码与其他代码并没有太大的不同。这是完全相同的问题。

标签: ios swift firebase firebase-storage


【解决方案1】:

您可以使用此功能在 Firebase 存储中上传内容

typealias blockCompletedWith = (Bool, String) -> Void 

func uploadToFirebaseStorage(data: Data, path: String, blockCompletedWith: @escaping blockCompletedWith) {
    let metadata = StorageMetadata()
    metadata.contentType = "image/jpeg" //Modify as per your need

    let store = Storage.storage()
    let storeRef = store.reference().child(path)
    let _ = storeRef.putData(data, metadata: metadata) { (metadata, error) in
        guard let _ = metadata else {
            print("error occured: \(error.debugDescription)")
            blockCompletedWith(false, "")
            return
        }

        storeRef.downloadURL(completion: { (url, error) in
            if let urlText = url?.absoluteString {
                blockCompletedWith(true, urlText)
            }
            else {
                blockCompletedWith(false, "")
            }
        })
    }
}

从此函数获取 URL 后,您可以根据需要对数据进行进一步处理。

如果您有任何问题,请告诉我。

乐于助人!

【讨论】:

  • 我工作了!但是后来我的代码出错了。我可以修复这个错误,但是如果我有更多问题,我会告诉你
  • 我的其他代码确实有问题,所以我要编辑问题并粘贴它。
  • 等等,有没有办法获得旧版本的 firebase。
  • 好的,我不这样做,但有什么方法可以让我获得旧版本的 podfile
  • 是的,你可以这样做... pod “pod name”, '~> podVersion' 这是一种方法
【解决方案2】:

降级 podfile 的正确做法。在你的 podfile 中,输入

pod 'Firebase/Storage', '4.4.0'

然后它将起作用。您不必降级其他 podfile。

【讨论】:

  • 这不是正确的方法...如果 firebase 在不久的将来弃用它,那么您别无选择,只能升级。休息是你的选择。
  • 嗯,暂时没关系。
  • @WonixerA 你不会想要这样做,因为它会在某个时候中断,并且肯定会出现间歇性操作——而且这在未来将很难追踪。您只需更新您的代码以匹配文档中显示的当前 API 即可。
猜你喜欢
  • 2018-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多