我是编码新手,刚刚开始使用 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 控制台会显示一个空数据库,但我的代码会打印此内容,就好像数据存在于数据库中一样。这怎么可能?尽管在网络控制台上显示为空,Firebase 是否会保留数据一段时间?
Optional({
"Daily Games" = "Initiated today at : 13:01:19";
Tournaments = {
Tournaments = "Initiated today at : 13:05:22";
};
})
我究竟做错了什么?如果我的代码显示了一个已填充的数据库,但我的 Web 控制台显示了一个空数据库,如何真正辨别数据库中有哪些内容和没有哪些内容?非常感谢
UPDATE:
我有 FIRDatabase.database().persistenceEnabled = true 并且还在真实设备上运行它。禁用 persistenceEnabled 后,它工作得非常好。在不禁用 persistenceEnabled 的情况下解决此问题的方法是什么?