2016-12-16 76 views
1

我是編程新手,剛開始使用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?

回答

3

嗯,這是我的提示。

我幾乎遇到了同樣的問題,爲了解決這個問題,我將其從observeSingleEvent更改爲observe,然後Firebase不僅會查看您的手機,因爲這正是您做這件事的原因。

+1

這確實是問題的最可能原因:'observeSingleEvent'與'persistenceEnabled = true'不能很好地混合,因爲它立即引發本地緩存中的(過期/刪除)值,並且您的監聽器不會' t堅持從服務器獲取更新/刪除事件。 –

+0

非常感謝Alisson&Frank - 我會試試這個 – Apneist