【问题标题】:Firebase erroneously shows deleted data / Swift 3 / Xcode 8.2Firebase 错误地显示已删除的数据 / Swift 3 / Xcode 8.2
【发布时间】:2017-05-02 07:25:12
【问题描述】:

我是编码新手,刚开始使用 Firebase,我正在运行以下函数,它基本上试图创建 2 个节点,“锦标赛”和“每日游戏”(如果它们不存在的话)。

数据库树应如下所示:

-London
  -City Game
      -Date(stringDate)  // getting this from another function, returns 2016-16-12
           -Tournaments
           -Daily Games

代码如下所示:

     func createTournamentsAndNonTournamentsNodes() {

        let databaseRef = FIRDatabase.database().reference()
        self.getLiveTimestamp()  // this calls a function that returns timestamp


        databaseRef.child("London/City Game/\(stringDate)").observeSingleEvent(of: .value, with:  { (snapshot) in

            if snapshot.hasChild("Daily Games") {
                print ("Daily Games node exists already")
            print(snapshot.key)
            print(snapshot.value as Any)
            } else {
                print ("Daily Games dont exist, creating it now")
                let postTwo : [String : AnyObject] = [("Daily Games") : "Initiated today at : \(self.timeStampString)" as AnyObject]

                databaseRef.child("London/City Game/\(stringDate)").child("Daily Games").updateChildValues(postTwo)
            }
            if snapshot.hasChild("Tournaments") {
                print ("Tournaments node exists already")
            print(snapshot.key)
            print(snapshot.value as Any)
            } else {
                print ("Tournaments dont exist, creating it now")
                let postOne : [String : AnyObject] = [("Tournaments") : "Initiated today at : \(self.timeStampString)" as AnyObject]
                databaseRef.child("London/City Game/\(stringDate)").child("Tournaments").updateChildValues(postOne)
            }
        })
    }

所以在空数据库上运行上面的结果是控制台打印“每日游戏节点已存在”和“锦标赛节点已存在”,键和值如下。但问题是这些是我在 1 小时前的一次运行中创建的,并立即从 Firebase Web 控制台手动删除,以测试代码,使我的数据库在再次运行代码之前完全为空。因此,重新加载 Firebase 控制台会显示一个空数据库,但我的代码会将其打印出来,就好像数据存在于数据库中一样。这怎么可能?尽管在 Web 控制台上显示为空,Firebase 是否会保留数据一段时间?

Optional({

    "Daily Games" = "Initiated today at : 13:01:19";
    Tournaments =     {
        Tournaments = "Initiated today at : 13:05:22";
    };
})

我做错了什么?如果我的代码向我显示一个填充的数据库,但我的 Web 控制台向我显示一个空的数据库,如何真正分辨数据库中的内容和内容?非常感谢

更新:

我有 FIRDatabase.database().persistenceEnabled = true 并且还在真实设备上运行它。禁用persistenceEnabled后,它工作得非常好。在不禁用persistenceEnabled的情况下解决此问题的方法是什么?

【问题讨论】:

    标签: ios swift xcode firebase firebase-realtime-database


    【解决方案1】:

    好吧,这是我的建议。

    我遇到了几乎相同的问题,为了解决这个问题,我将 observeSingleEvent 更改为 observe,然后 Firebase 不仅会查看您的手机,因为这正是您这样做时所做的。

    【讨论】:

    • 这确实是问题的最可能原因:observeSingleEventpersistenceEnabled = true 不能很好地混合,因为它会立即使用本地缓存中的(过时/删除的)值和您的侦听器不会留下来从服务器获取更新/删除事件。
    • 非常感谢 Alisson 和 Frank - 我会试试这个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 2017-08-12
    • 2015-06-09
    • 2017-06-26
    • 1970-01-01
    • 2020-09-16
    • 2017-06-01
    相关资源
    最近更新 更多