2017-07-16 7 views
0

私は本のノードとユーザのノードを持っており、ユーザのノードはお気に入りの本を持っています。複数のキーを持つクエリノードfirebase iOS/Firebaseベースのキー配列を持つQueryequal IOS

ので、私は現在のフェッチUSER-を得るように>好きな本を取得=>は、私はそれをこのように修正することができる方法firebasui/firebase

+0

一般的に、Firebase構造とこれまでに試したコードをテキストとして含めることをお勧めします。 Firebaseコンソール - >右の3つの点 - > JSONの書き出しで構造を取得できます。あなたの質問では、お気に入りの本を手に入れて表示したいと言います。どの好きな本、それらのすべて?最もポピュラーな? 1ユーザーの本?質問がはっきりしたら答えるのに役立ちます。 – Jay

答えて

0

を使用してブックノードから図書のリストを取得するために今リストを与えます。コレクションビューをお気に入りの配列に直接バインドし、次にスナップショット呼び出しごとにブックノードを設定してからセルを設定する

let ref = firebaseRef?.child("users").child(userUid!).child("FavBooks").queryOrderedByKey() 

self.datasrc = (savedCollectionView?.bind(to: ref!){ collectionView, IndexPath, snap in 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: IndexPath) 

    let bookRef = self.firebaseRef?.child("Books").child(snap.key).queryOrderedByKey() 
    bookRef?.observeSingleEvent(of: .value, with: {(snapshot) in 
    //configure cell 
    }) 
    return cell 
})! 
+0

これは、Firebaseからデータが返される前にセルが返されるため問題になります。ほとんどの場合、セルは空白になります。コードはインターネットよりもはるかに高速であるため、* return cell *呼び出しは、observe closureがセルを移入するための変更を行う前に実行されます。 – Jay

+0

あなたは正しいです、これを解決する他の方法はありますか? –

+0

ええ - そうしないでください。笑。すべての冗談は、あなたのviewViewまたはcollectionView dataSourceを最初に(おそらくviewDidLoad関数に)配置し、その後、データソース(通常は配列)がfirebaseクロージャ内に完全に配置されると、tableView.reloadDataローカル配列(dataSource)。データを保存したままにするには、.childAddedイベントのFirebaseにオブザーバーを追加すると、新しく追加されたFirebaseデータからdataSourceにデータを追加し、次にtableView.reloadData()を使用してUIを更新します – Jay

関連する問題