【问题标题】:ref.downloadURL() not executing or returning url once uploadTask is successuploadTask 成功后,ref.downloadURL() 不执行或返回 url
【发布时间】:2020-07-07 00:24:18
【问题描述】:

目标:将数据上传到 Firebase 存储并返回公共下载链接的 url。
问题:返回链接的函数没有更新我的导致我认为链接不可用或功能以某种方式出错的数据结构。
代码

uploadTask.observe(.success){ snapshot in
                uploadData["comments"] = "0"
                uploadData["likes"] = "0"
                uploadData["name"] = "JGTech"
                snapshot.metadata?.storageReference?.downloadURL(completion: { (url, err) in
                    if err != nil {
                        print(err!)
                    }else{
                        uploadData["image"] = url?.absoluteString
                    }
                    uploadData["image"] = url?.absoluteString
                })

之后的数据结构
uploadData = ["name": "JGTech", "cmets": "0", "likes": "0"] 没有图片键值对。

[2020 年 7 月 7 日]
我尝试了实现此功能的不同变体,所有结果都表明此功能未执行。可能是因为这个函数是异步的。在 downloadURL 行做了一个断点,这个函数被完全跳过了。

【问题讨论】:

  • 请编辑问题以说明您如何观察到您的数据结构未更新。请记住,downloadURL 是异步的,不会立即完成。
  • 什么是uploadData?
  • uploadData 是未填充图像键值对的数据结构
  • @DougStevenson 如何等到下载链接准备好?有没有可以使用的等待函数或 for 循环?

标签: ios swift firebase firebase-storage


【解决方案1】:

我不确定为什么这会起作用,而不是相反。似乎我必须在定义了变量 linkString 的块中执行所有逻辑

            uploadTask.observe(.success){ snapshot in
                var linkString: String = ""
                uploadData["comments"] = "0"
                uploadData["likes"] = "0"
                uploadData["name"] = "JGTech"
                ref.downloadURL(completion: { (url, err) in
                    if err == nil {
                        if let link = url {
                            linkString = link.absoluteString
                            uploadData["image"] = linkString

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 2023-03-14
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    相关资源
    最近更新 更多