2017-02-21 6 views
0

Firebaseデータベースのこのセクションにある子の数を取得しようとしていますが、設定している変数はローカルに設定されています。興味深いことに、最初のprintステートメントは2つ(これは必要な番号です)を出力しますが、2番目のprintステートメントはゼロを出力します。関数を正しい値に戻すにはどうしたらいいですか?お手伝いありがとう。Firebaseからの検索時に変数が実際に設定されない

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 
    var forReturn = 0 
    let databaseRef = FIRDatabase.database().reference() 
    databaseRef.child("gameNumber").observeSingleEvent(of: .value, with: { snapshot in 
     forReturn = Int(snapshot.childrenCount) 
     print(forReturn) 
    }) 
    print(forReturn) 
    return forReturn 
} 

これは、繰り返しの2桁と0を出力します。

+0

おそらく非同期ブロック – Pierce

答えて

0

forReturnをクラスのスコープで宣言し、firebaseメソッドを別の場所で呼び出す必要があります。 firebase完了ハンドラの内部に達すると、テーブルをリロードします。

//In your viewDidLoad or wherever you think suitable  
let databaseRef = FIRDatabase.database().reference() 
databaseRef.child("gameNumber").observeSingleEvent(of: .value, with: { snapshot in 
    DisptachQueue.main.async { 
     forReturn = Int(snapshot.childrenCount) 
     self.tableView.reloadData() //take an outlet of tableView 
     print(forReturn) 
    } 
}) 
+0

これは非同期ですか?もしそうなら、あなたはおそらく 'DispatchQueue.main.async {}'を使用するべきです – Pierce

+0

はいそれは非同期です、私たちはここでもディスパッチキューを使用することができます – Naresh

+0

あなたはそれをどのように実装しますか? – joshLor

関連する問題