2017-03-02 5 views
0

とchildAddedを同じに処理するにはどうすればこの機能が正しくロードされますのUITableViewありますobserveSingleEvent

Snap (-KeEan584BeCQ0eJ2dxs) { 
    "-KeEb2XMrCUFLfO90y0v" =  { 
     PictureVersion = 6; 
     userID = N4GifT8HvfRrDEkC09ARC1DnYyI3; 
     username = pietje; 
    }; 
    name = sdddd; 
} 
{ 
    PictureVersion = 6; 
    userID = N4GifT8HvfRrDEkC09ARC1DnYyI3; 
    username = pietje; 
} 
:その中に1人のユーザーが存在する場合、出力としてこれを印刷し

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{ 

これはうまくいきます。今、私は、新しいユーザーが参加したときにテーブルビューを更新したい私は、この機能を追加しました:。

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

これはアウト出力します。この出力が異なる理由を私は知らない

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

。私は両方の関数(observeとobserveSingleEvent)を扱うことができる1つの関数が必要ですが、なぜobserve関数が正しく機能しないのかわかりません。誰か助けてくれますか?

答えて

1

あなたが言うことは、奇妙に思えますが、そのアイデアは次のようなものです:observeSingleEventは名前が示唆するように一度だけ実行されます。一方observeは、そのタイプがFirebase Cloudによって呼び出される必要があるたびに呼び出されます。つまり、.childAddedの場合は** observeSingleEvent **を使用し、そのブロックは1つの子に対してのみ呼び出されます。.childAddedがそのスナップショットのすべての子に対して実行されます。新しい子供が追加されるたびに引き続き呼び出されます。新しい子供が追加されるたびにtableViewを更新するには、.childAddedを使用する必要があります。

私はあなたの質問に答えたかどうかわかりません。そうでない場合は、私に知らせてください。

+0

ありがとうございます、しかし私の質問はなぜ上記の関数はchildAddedでは機能しませんが、observeSingleEventではうまく機能します。ありがとうございました。 – Petravd1994

+0

心配しないで、私はそれを働かせました。私はobserveSingleEvent全体を削除し、既存のすべての子をループするのでchildAddedを使用しました。 – Petravd1994

+0

素晴らしい!うん、それは私が意味するものです。 – Pink

関連する問題