2017-04-04 1 views
1

관찰자를 사용하여 Firebase에서 데이터를 가져 오려고합니다. 그러나 이전에 만든 배열에 값을 추가하려고하면 실패합니다. 여기에 코드가 있습니다. 누군가 나를 도울 수 있습니까?swift3 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) 
    } 

내가 그 배열 에 값을 추가 한 후에는 1을 인쇄해야하지만 당신은 중포 기지의 관찰자가 당신이 그것을 것 먼저 전화를 그렇게하더라도, 비동기 것을 알아야합니다 0

+1

'print' 행과'append' 행에 중단 점을 넣으십시오. 이제 코드를 실행하고 어떤 코드가 먼저 호출되는지 확인하십시오. – rmaddy

+0

Firebase 리스너가 비동기이기 때문입니다. 스위프트 (Swift)에서이 문제를 다루는 방법에 대한 많은 예제를 온라인에서 찾을 수 있어야합니다. –

답변

0

인쇄 응답을 기다려야합니다. 그 동안 앱은 나머지 코드와 함께 계속해서 인쇄 기능을 호출합니다. 그것을 증명하고 싶다면 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

환영합니다! –

관련 문제