Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Firebase错误地显示删除的数据/Swift 3/Xcode 8.2_Ios_Swift_Xcode_Firebase_Firebase Realtime Database - Fatal编程技术网

Ios Firebase错误地显示删除的数据/Swift 3/Xcode 8.2

Ios Firebase错误地显示删除的数据/Swift 3/Xcode 8.2,ios,swift,xcode,firebase,firebase-realtime-database,Ios,Swift,Xcode,Firebase,Firebase Realtime Database,我刚开始使用Firebase进行编码,我正在运行下面的函数,基本上是尝试创建两个节点,“锦标赛”和“每日游戏”(如果它们还不存在的话) 数据库树应如下所示: -London -City Game -Date(stringDate) // getting this from another function, returns 2016-16-12 -Tournaments -Daily Games func createTo

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

数据库树应如下所示:

-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)
            }
        })
    }
代码如下所示:

-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控制台会显示一个空数据库,但我的代码会将其打印出来,就像数据库中存在数据一样。这怎么可能?Firebase是否会在web控制台上显示为空的情况下保留数据一段时间

Optional({

    "Daily Games" = "Initiated today at : 13:01:19";
    Tournaments =     {
        Tournaments = "Initiated today at : 13:05:22";
    };
})
我做错了什么?如果我的代码显示的是一个填充的数据库,而我的Web控制台显示的是一个空数据库,那么如何真正区分数据库中有什么和没有什么?非常感谢

更新:

我有FIRDatabase.database().persistenceEnabled=true,并在实际设备上运行它。禁用persistenceEnabled后,它的工作绝对正常。在不禁用persistenceEnabled的情况下,如何解决此问题

这是我的建议


我遇到了几乎相同的问题,为了解决这个问题,我从
observeSingleEvent
改为
observe
,然后Firebase不仅查看你的手机,因为这正是它在执行操作时所做的。

这确实是问题的最可能原因:
observeSingleEvent
persistenceEnabled=true
不匹配,因为它会立即触发(过时/删除)来自本地缓存的值,并且您的侦听器不会停留在服务器上获取更新/删除事件。非常感谢Alisson&Frank-我将尝试此方法