我遇到了来自面料的崩溃报告的问题我不明白:
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
因此,解决方案不会被解雇。
答案 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])
}
}