2017-03-09 63 views
0

我的實時數據庫是這樣的:ObserveSingleEvent不起作用好

enter image description here

它僅包含1名兒童,你可以看到。幾分鐘前我在RunningGames中還有4個孩子。我在瀏覽器中刪除了它們。當現在打電話給:

private lazy var runningGamesRef: FIRDatabaseReference = FIRDatabase.database().reference().child("RunningGames") 
self.runningGamesRef.observeSingleEvent(of: .value, with: { (snapshot) -> Void in 
      for gameSnap in snapshot.children { 
       let id = (gameSnap as! FIRDataSnapshot).key 
       print(id) 
} 
}) 

它仍然打印我在瀏覽器中刪除的那些遊戲。在我的應用程序中調用runningGameRef!.removeValues()會在瀏覽器和iPhone上刪除它(打印(ID)已修復)。我在不同的孩子上的多個observeSingleEvent函數上有這個錯誤,不僅是RunningGames的孩子。什麼會導致這個惱人的錯誤?

RunningGames中的一些孩子也有孩子,但他們會在應用中自動刪除自己。但是,調用observeSingleEvent時,這些值仍然可見。

+1

如果我猜的話,我會說這是可能正從設備的本地高速緩存中的過時信息。 –

+0

是否將persistenceEnabled設置爲yes? – Jay

+0

是的,會導致問題嗎? – Petravd1994

回答

1

這可能是你的本地緩存,仍然持有過時的信息。當你從多個來源處理數據時,經常發生這種情況。

我會嘗試使用observe而不是observeSingleEvent。我知道這有點奇怪(如果你只想加載一次數據,並不是真正想要的),但應該讓你的信息保持最新。

也許通過這樣做你可以只取一次信息。

var handle: UInt = 0 
    handle = ref.observe(.value, with: { snapshot in 
    for gameSnap in snapshot.children { 
     let id = (gameSnap as! FIRDataSnapshot).key 
     print(id) 
    } 
    ref.removeObserver(withHandle: handle) 
}) 

Source of the code (Frank van Puffelen)

+0

真的沒有辦法只加載一次數據嗎?我只想在某些房間檢查一些值......奇怪的是它不能正常工作,它不應該將其保存在本地緩存中。我只想檢查一次只有一次的值。 – Petravd1994

+0

編輯我的答案,你可以試試。 –

+0

「參數標籤與任何可用的重載不匹配」我認爲這是因爲我想循環訪問observeSingleEvent中快照獲取的值。可以觀察給我一個快照? – Petravd1994