离开DispatchGroup导致我的代码崩溃

时间:2018-07-12 06:52:14

标签: arrays swift grand-central-dispatch

我有以下功能,但它不断崩溃 dispatchGroup.leave()语句,我不明白为什么。根据我在网上发现的信息,每个dispatchGroup.leave()必须与一个dispatchGroup.enter()相关联,我认为我的函数就是这种情况。

self.kycRecords仅包含1个元素(目前)顺便说一句。

 @IBAction func checkCustomerList(_ sender: Any) {
        let dispatchGroup = DispatchGroup()

        for kycRecord in self.kycRecords {
            dispatchGroup.enter()
            ApiManager.sharedInstance.postUserToArtemis(kycRecord) {(response, error) in
                dispatchGroup.leave()
                if error != nil {
                    kycRecord.kycStatus = "failed"
                } else {
                    if response == true {
                        kycRecord.kycStatus = "passed"
                    } else {
                        kycRecord.kycStatus = "failed"
                    }
                }
            }
        }

        dispatchGroup.notify(queue: DispatchQueue.main, execute: {
            print("done")
            self.writeOutput()
        })
    }

它崩溃并显示以下消息:

线程1:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以在退出任何组之前检查在组中输入的计数数 在补丁工作

下方
let count = self.groupExecuting.debugDescription.components(separatedBy: ",").filter({$0.contains("count")}).first!.components(separatedBy: CharacterSet.decimalDigits.inverted).filter({Int($0) != nil})

答案 1 :(得分:0)

在我的情况下,离开dispatchQueue导致Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) dispatchGroup leave崩溃,因为它留在了主线程中。更改为.global()后,它就固定了。