2017-01-26 9 views
1

私は、ディスパッチグループを使用して、すべての招待状が送信されてから続行するようにしています。私はnotifyコールバックは一度だけ、すべてのentersleaveに一致していると呼ばれてしまったと思ったが、鉱山は、ここに私のコードだ、複数回呼び出さ取得することが表示されます。私のコンソールでなぜDispatch Group Notify getは2回呼び出されましたか?

for invite in invites { 
     dispatchGroup.enter() 
     let ref = FIRDatabase.database().reference().child("users").child(invite.id).child("invites") 
     print(invite) 
     ref.updateChildValues([name: nameTextField.text!]) { (error, ref) -> Void in 
      dispatchGroup.leave() 

      dispatchGroup.notify(queue: DispatchQueue.main, execute: { 
       print("YOYOYO") 
      }) 
     } 
    } 

私は2「YOYOYO」のを見ている混乱しています私。私はこれを間違ってやっているのか、私の仮定が間違っているのか誰にでも教えてくれますか?

答えて

3

おそらく2つのinvitesがあります。あなたはすべてのinvitesが処理された後に通知を受けるにしたい場合はforループの外dispatchGroup.notifyを移動:

for invite in invites { 
    dispatchGroup.enter() 
    let ref = FIRDatabase.database().reference().child("users").child(invite.id).child("invites") 
    print(invite) 
    ref.updateChildValues([name: nameTextField.text!]) { (error, ref) -> Void in 
     dispatchGroup.leave()    
    } 
} 

dispatchGroup.notify(queue: DispatchQueue.main) { 
    print("YOYOYO") 
} 
関連する問題