点击按钮时,函数调用发生奇怪的崩溃

时间:2017-01-17 18:46:22

标签: ios swift

我遇到了来自面料的崩溃报告的问题我不明白:

 SVProgressHUD.show()
        let selectedRow = self.pickerView.selectedRowInComponent(0)
        let profileId = self.profiles[selectedRow].id
        RemoteServiceFactory.serviceCall().updateUser(profileId) { (result, error) in
            SVProgressHUD.dismiss()
            if let _ = error {
                self.showErrorWithMessage("error")
            } else {
                self.goToNextStep(self.profiles[selectedRow])
            }
        }

当我使用goToNext方法时,它只包含以下代码:

if NSThread.isMainThread() { print("Main Thread") }

当我测试它时它才起作用。我不知道它会如何崩溃。

有一个@objc goToNext方法也很奇怪,因为我在没有@objc的情况下声明它。

有人对此有更多了解吗?

编辑:

我测试了回调是通过

回到主线程上的
$data

因此,解决方案不会被解雇。

2 个答案:

答案 0 :(得分:1)

尝试解除MainThread上的SVProgressHUD.dismiss(),因为你现在正在后台消除它,并且HUD交互通常必须在MainThread中完成

 dispatch_async(dispatch_get_main_queue {
    SVProgressHUD.dismiss()
 })

答案 1 :(得分:0)

我猜测你的回调是在视图控制器内存不足后发生的。

每当你进行异步调用时,你都应该将self转换为弱自我。

 SVProgressHUD.show()
    let selectedRow = self.pickerView.selectedRowInComponent(0)
    let profileId = self.profiles[selectedRow].id
    RemoteServiceFactory.serviceCall().updateUser(profileId) { [weak self] (result, error) in

        SVProgressHUD.dismiss()
        guard let weakSelf = self else { return }

        if error != nil {
            weakSelf.showErrorWithMessage("error")
        } else {
            weakSelf.goToNextStep(weakSelf[selectedRow])
        }
    }