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