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

问题描述:

我是编程新手,刚开始使用Firebase,我正在运行下面的函数,它基本上试图创建2个节点,“锦标赛”和“每日游戏”(如果它们不存在的话)。Firebase错误地显示删除的数据/ Swift 3/Xcode 8.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控制台显示为空的数据库,怎样才能真正知道数据库中的内容和内容?非常感谢

UPDATE:

我FIRDatabase.database()persistenceEnabled =真实,也是一个真正的设备上运行此。禁用persistenceEnabled后,它工作得很好。有什么方法可以解决这个问题,而不禁用persistenceEnabled?

嗯,这是我的提示。

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

+1

这确实是问题的最可能原因:'observeSingleEvent'与'persistenceEnabled = true'不能很好地混合,因为它立即引发本地缓存中的(过期/删除)值,并且您的监听器不会' t坚持从服务器获取更新/删除事件。 –

+0

非常感谢Alisson&Frank - 我会试试这个 – Apneist