2017-05-07 12 views
0

私はswift 3のfirebaseからリレーショナルデータをフェッチして配列に格納しようとしています。それは私が望むようにすべてをフェッチしますが、最終的な配列にアクセスすることはできません。 私はオンラインで見つけたものすべてを試しましたが、正しく動作させることはできません。SwiftのFirebaseからフェッチした後の最終配列へのアクセス

フェッチしている3つの子ノードがあるので、フェッチするたびに配列に追加されます。

出力は次のようになります。

success 
success 
success 

は、私はちょうどそれがかつて「成功」を印刷したいです。適切

"interests" : { 
    "relations" : { 
     "userAndSection1" : { 
     "7fQvYMAO4yeVbb5gq1kEPTdR3XI3" : { // this is the user ID 
      "-KjS8r7Pbf6V2f0D1V9r" : true, // these are the IDs for Section1 
      "-KjS8tQdJbnZ7cXsNPm3" : true, 
      "-KjS8unhAoqOcfJB2IXh" : true 
    }, 
} 

すべてのロードと私のコレクションビューを移入:関係の

// Here the child with the relations is loaded 
func fetchFollowingSection1IDs() { 
    guard let userID = FIRAuth.auth()?.currentUser?.uid else { return } 

    let reference = FIRDatabase.database().reference().child("interests").child("relations").child("userAndSection1").child(userID) 
    reference.observe(.childAdded, with: { (snapshot) in 

     // It's supposed to fetch the details of Section1 according to the childs from the relations (they are the IDs of Section1) 
     self.fetchSection1(section1ID: snapshot.key, completionHandler: { success in 
      guard success == true else { 
       return 
      } 

      print("success") 
      self.collectionView?.reloadData() 

     }) 

    }, withCancel: nil) 
} 

// Here it gets the details from Firebase 
func fetchSection1(section1ID: String, completionHandler: @escaping (Bool) ->()) { 

    let ref = FIRDatabase.database().reference().child("interests").child("details").child("country").child("section1").child(section1ID) 
    ref.observeSingleEvent(of: .value, with: { (snapshot) in 

     self.collectionView?.refreshControl?.endRefreshing() 

     if let dictionary = snapshot.value as? [String: AnyObject] { 
      let section1 = Section1New(section1ID: section1ID, dictionary: dictionary) 
      self.section1s.append(section1) 
     } 

     completionHandler(true) 

    }) { (err) in 
     print("Failed to fetch section1s:", err) 
    } 
} 

マイFirebase構造は次のようになります。

は、ここに私のコードです。配列への3つの追加のため、セクション1の番号が間違っているだけで問題になります。

ありがとうございました!

答えて

0

コードは、あなたがしていることを正確に示しています。

あなたのfirebaseイベントは.childAddedであるため、一度に1つずつ各子ノードを反復処理します。

まず、-KjS8r7Pbf6V2f0D1V9rをロードし、section1s配列に追加します。次に、配列に1つの項目が追加されます。

次に、-KjS8tQdJbnZ7cXsNPm3をロードして配列に追加します。配列に2つの項目があり、2行に出力されます。

あなたの質問の中で私たちが見ていないのは、配列を実際に出力する行だけです。これは、おそらくあなたのcollectionViewデリゲートメソッドにあります。

ユースケースによっては、.valueですべてを読み込み、それを反復してdataSource配列に値を設定することができます。

+0

ありがとうございました!実現した後で私の問題の解決策を見つけましたが、これは私のニーズにとって正しいコードではありません!それにもかかわらず、それは動作し、同様の問題を持つ誰かを助けるかもしれない:) –

関連する問題