2017-04-04 17 views
1

オブザーバーを使用してfirebaseからデータを取得しようとしています。しかし、以前に作った配列に値を追加しようとすると失敗します。ここにコードは、誰かが私を助けてくれる?私はその配列 に値を追加しますが、それはあなたがFirebaseオブザーバが非同期であることを知っている必要がありますので、あなたが最初にそれを呼び出す場合でも、それは意志0swift3 firebase内でappend関数が動作しないobserveSingleEvent

+1

'print'行と' append'行にブレークポイントを設定します。今すぐコードを実行し、最初に呼び出されたコードに注目してください。 – rmaddy

+0

これは、Firebaseリスナーが非同期であるためです。 Swiftでは、これに対処する方法について多くの例がオンラインで見つかるはずです。 –

答えて

0

を印刷した後

class ProductTableViewController: UITableViewController{ 
    var productName:[String] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     fetchProduct() 
     print(self.productName.count) 
    } 

    func fetchProduct(){ 
     let currentUserId = FIRAuth.auth()?.currentUser?.uid 

     FIRDatabase.database().reference().child("users").child(currentUserId!).child("products").observe(.value, with: { (snapshot) in 
       self.productName.append("Hello") 
     }, withCancel: nil) 
    } 

それは1を印刷する必要があります応答を待つ必要があります。その間、あなたのアプリケーションはコードの残りの部分を続けるので、print関数を呼び出します。それを証明したい場合は、firebaseの呼び出しの中にプリントを入れてみてください:

class ProductTableViewController: UITableViewController{ 
var productName:[String] = [] 

override func viewDidLoad() { 
    super.viewDidLoad() 
    fetchProduct() 

} 

func fetchProduct(){ 
    let currentUserId = FIRAuth.auth()?.currentUser?.uid 

    FIRDatabase.database().reference().child("users").child(currentUserId!).child("products").observe(.value, with: { (snapshot) in 
      self.productName.append("Hello") 
      print(self.productName.count) 
    }, withCancel: nil) 
} 

希望します!

+0

ありがとう、本当に助ける –

+0

ようこそ! –

関連する問題