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不仅会查看您的手机,因为这正是您做这件事的原因。
这确实是问题的最可能原因:'observeSingleEvent'与'persistenceEnabled = true'不能很好地混合,因为它立即引发本地缓存中的(过期/删除)值,并且您的监听器不会' t坚持从服务器获取更新/删除事件。 –
非常感谢Alisson&Frank - 我会试试这个 – Apneist