2017-04-04 2 views
1

Ich versuche, Daten von der Firebase mit einem Beobachter zu erhalten. Aber wenn ich versuche, den Wert an das Array anzuhängen, das ich zuvor erstellt habe, schlägt es fehl. Hier ist der Code, Kann mir bitte jemand helfen?swift3 Append-Funktion funktioniert nicht innerhalb der Firebase observeSingleEvent

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) 
    } 

Es sollte 1 drucken, nachdem ich einen Wert in diesem Array anhängen, aber er druckt 0

+1

Setzen Sie einen Breakpoint auf die 'print' Zeile und auf die' append' Zeile. Führen Sie nun Ihren Code aus und beachten Sie, welcher zuerst aufgerufen wird. – rmaddy

+0

Dies liegt daran, dass Firebase-Listener asynchron sind. Sie sollten in Swift viele Beispiele finden, wie Sie damit umgehen können. –

Antwort

0

Sie müssen wissen, dass die Firebase Beobachter asynchron ist, so dass selbst wenn Sie es zuerst nennen, wird es muss auf die Antwort warten. In der Zwischenzeit wird Ihre App mit dem Rest des Codes fortfahren und die Druckfunktion aufrufen. Wenn Sie es beweisen möchten, versuchen Sie, den Ausdruck in den Firebase-Aufruf zu setzen:

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) 
} 

Hoffe es hilft!

+0

Danke, es hilft wirklich –

+0

Gern geschehen! –

Verwandte Themen