为何Dispatch Group Notify被叫两次?

时间:2017-01-26 06:13:24

标签: swift firebase swift3 grand-central-dispatch

我试图让我的应用程序使用调度组来确保在继续之前已发送所有邀请。我认为notify回调只有在所有enters匹配leave时才会被调用,但我的多次调用似乎已被调用,这里是我的代码:

    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让我很困惑。如果我这样做不正确或者我的假设是错误的,有人可以告诉我吗?

1 个答案:

答案 0 :(得分:5)

您可能有两个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")
}