Ios Firebase错误地显示删除的数据/Swift 3/Xcode 8.2
我刚开始使用Firebase进行编码,我正在运行下面的函数,基本上是尝试创建两个节点,“锦标赛”和“每日游戏”(如果它们还不存在的话) 数据库树应如下所示: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
-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-我将尝试此方法