2017-01-26 5 views
1

Я пытаюсь заставить мое приложение использовать группы отправки, чтобы убедиться, что все приглашения были отправлены до продолжения. Я думал, что notify обратный вызов только получил колл сразу все enters имеют соответствующий leave но мой, кажется, вызывался несколько раз, вот мой код:Почему Dispatch Group 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, execute: { 
       print("YOYOYO") 
      }) 
     } 
    } 

В моей консоли я вижу 2 «YOYOYO» S, который перепутал меня. Может ли кто-нибудь сообщить мне, если я делаю это неправильно или мои предположения ошибочны?

ответ

3

Возможно, у вас есть два invites. Перемещение dispatchGroup.notify из петли for, если вы хотите получить уведомление, после того, как все invites обрабатываются:

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") 
} 
Смежные вопросы