arrays - 离开 DispatchGroup 导致我的代码崩溃

标签 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

最佳答案

您可以在离开任何组之前检查组中输入的计数 通过下面的 Patch Work

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

关于arrays - 离开 DispatchGroup 导致我的代码崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51299012/

相关文章:

swift - DispatchGroup 通知 block 被提前调用

c++ - 将标准输入读入 char 数组 - C++

SwiftUI - 调整 ScrollView 滚动指示器插入

ios - 如何在 Swift iOS 中通过 QR 扫描仪扫描时在日历中添加事件

ios - swift 3 WKWebView 'URLRequest';您的意思是使用 'as' 进行显式转换吗? ( 漏洞 )

ios - SQLite 错误 : EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, 子代码 = 0x0) -iOS

swift - Swift GCD 覆盖中的类型不匹配

java - 检查数组的值

c++ - 使用字符数组作为映射中的键

c++ - C++ 中的 C99 样式可变长度数组函数签名