我有以下功能,但它不断崩溃 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)
答案 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()
后,它就固定了。