【问题标题】:Firebase's snapshot.value cast to Bool suddenly returning nilFirebase 的 snapshot.value 转换为 Bool 突然返回 nil
【发布时间】:2018-12-14 03:44:06
【问题描述】:

所以我的代码运行良好,但今天当我尝试将 Firebase 的 snapshot.value 转换为 Bool 时,它返回 nil。我根本没有对代码进行任何更改。但如果我将它转换为字符串,它就可以正常工作(因为?字符串返回“true”)。

在我投射到 [String: Bool] 的另一个地方出现了同样的问题。

与之前不同的一点是,我今天安装了 Xcode 10 beta 3(也安装了 Xcode 9.4)。两个 Xcode 版本都返回 nil。代码如下:

if let currentUserId = Auth.auth().currentUser?.uid{

        Database.database().reference().child("users/\(currentUserId)/share").observe(.childAdded) { (snapshot) in

            let data = snapshot.value as? Bool

            if data == true{

                self.showNotificationsBadge()

            }

        }

    }

编辑:快照不为零。您可以在控制台窗格中看到它。我已经打印了 snapshot.key 和 .value。

编辑 2:如果我的问题引起任何混淆,我很抱歉。这个问题的主要目的是了解问题,是Firebase SDK还是Xcode。因为到目前为止它工作得很好。我知道如何解决这个问题以及如何将字符串转换为布尔值。

编辑 3:感谢大家的回答。很抱歉我无法正确表达我的想法。我只想知道这种意外的行为以及为什么会发生?谁是这里的罪魁祸首? Xcode,Firebase SDK?这段代码运行了大约一个月,运行良好。我不是在寻求解决方案,我只是对这种行为感到好奇。如果 Firebase 团队的人能解释这个问题,那就太好了。

编辑 4: 删除图像并添加代码。感谢@Jay 的评论,也解决了这个问题。

【问题讨论】:

  • 最有可能的是,您的一个节点中有一些不是布尔值的东西(例如,“true”不是布尔值)。尝试注释掉闭包中的代码并将其替换为 print(snapshot) 并检查控制台中的输出。通常,在您的问题中也要包含您的 Firebase 结构的 sn-p。另外,请不要在您的问题中包含图片。包括代码和结构作为文本。要获取您的 Firebase 结构,请使用 Firebase 控制台->导出 JSON 并复制粘贴您的结构的 sn-p。见images and links are evil
  • ...并复制了这些发现;具有“true”节点而不是 true 会导致 data var 为 nil,如预期的那样。
  • 我刚刚发布了图片以在一个地方显示代码、调试器和控制台。您可以在控制台中看到我打印了 snapshot.key & .value。价值是真实的而不是“真实的”。但我明白你的意思。我会记住这一点,不会发布图像。感谢您指出 Firebase 结构。我刚刚发现了问题。当我们的 Android 开发人员将其作为字符串编写时,我将其编写为布尔值。但仍然很好奇为什么它不能将包含 true 的对象转换为 Bool。无论如何,既然是评论,我怎么能接受你的回答?
  • ...留下image 的链接,因为我已将其从问题中删除。您可以在此处查看控制台中的快照值。
  • 太棒了!很高兴您发现了问题!无需接受,因为这是人们遇到的常见问题。

标签: ios swift xcode firebase


【解决方案1】:

在检查值之前,您需要检查快照是否为零。

if let data = snapshot.value as? Bool {

.... }

【讨论】:

  • 是的,你是对的,我应该先检查一下,但你可以在控制台中看到我已经打印了 snapshot.key 和 .value 并且两者都不是 nil。
  • @Hadi 将您的代码更改为“observing.value”而不是“observing.childAdded”。尝试让我知道是否有效。
【解决方案2】:

这件事最近发生在我身上。我发现我在子值周围有引号,例如。 “真的”。删除引号,@Maximo 中的解决方案应该可以按预期工作。

【讨论】:

    猜你喜欢
    • 2018-02-25
    • 2020-11-05
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    相关资源
    最近更新 更多