2017-03-02 48 views
0

我有一個UITableView將與該功能正確加載:如何處理childAdded一樣observeSingleEvent

channelRef?.observeSingleEvent(of: .value, with: { (snapshot) in 
     self.updateTableViewWithPlayers(snapshot: snapshot) 
    }) 

func updateTableViewWithPlayers(snapshot: FIRDataSnapshot) 
    { 
print(snapshot) 
     let storage = FIRStorage.storage() 
     let storageRef = storage.reference(forURL: "gs://omega-towers-f5beb.appspot.com") 
      if let snapDict = snapshot.value as? [String:AnyObject]{ 
       for each in snapDict{ 
        print(each.value) 
        let UIDs = each.value["userID"] as? String 
        let pictureVersion = each.value["PictureVersion"] as? String 
        if let allUIDS = UIDs{ 
         if let allPictureVersions = pictureVersion{ 

如果有1個用戶在其它打印此爲輸出:

Snap (-KeEan584BeCQ0eJ2dxs) { 
    "-KeEb2XMrCUFLfO90y0v" =  { 
     PictureVersion = 6; 
     userID = N4GifT8HvfRrDEkC09ARC1DnYyI3; 
     username = pietje; 
    }; 
    name = sdddd; 
} 
{ 
    PictureVersion = 6; 
    userID = N4GifT8HvfRrDEkC09ARC1DnYyI3; 
    username = pietje; 
} 

這很好。現在我想,當一個新的用戶連接中更新的tableview我添加了這個功能。

channelRef?.observe(.childAdded, with: { (snapshot) -> Void in 
     self.updateTableViewWithPlayers(snapshot: snapshot) 
    }) 

此打印出:

Snap (-KeEbYVJIle8dhP1Oyxm) { 
    PictureVersion = 6; 
    userID = N4GifT8HvfRrDEkC09ARC1DnYyI3; 
    username = pietje; 
} 
6 
pietje 
N4GifT8HvfRrDEkC09ARC1DnYyI3 

我不知道爲什麼這個輸出是不同的。我想有一個函數可以處理這兩個函數(觀察和observeSingleEvent),但我不知道爲什麼觀察功能無法正常工作。誰能幫我嗎?

回答

1

你說它打印出來似乎很奇怪,但想法如下:observeSingleEvent將只運行一次,如名稱所示。另一方面,觀察到將在每次該類型需要由Firebase Cloud調用時調用。意思是,如果您使用** observeSingleEvent **類型.child添加了,您的塊將僅針對一個子項調用,其中.childAdded爲該快照中的每個子項運行。並且每次添加新的孩子時都會繼續調用。如果您希望每次添加新的孩子時更新您的tableView,則應該使用觀察.child添加

我不確定我是否回答了您的問題。如果沒有,請讓我知道。

+0

謝謝,但我的問題是爲什麼上述函數不適用於childAdded,但適用於observeSingleEvent。謝謝。 – Petravd1994

+0

沒關係,我得到它的工作。我刪除了整個observeSingleEvent,並使用childAdded,因爲它遍歷所有現有的孩子。 – Petravd1994

+0

太棒了!是的,這就是我的意思。 – Pink