我是編程新手,剛開始使用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'與'persistenceEnabled = true'不能很好地混合,因爲它立即引發本地緩存中的(過期/刪除)值,並且您的監聽器不會' t堅持從服務器獲取更新/刪除事件。 –
非常感謝Alisson&Frank - 我會試試這個 – Apneist