我有一些在块中运行的简单代码(完成块)。在完成块中,如果块中的进程返回FALSE,我想显示UIAlertView。作为最佳实践,您不应该在后台线程中调用任何UI方法,因此我使用dispatch_get_main_queue来显示UIAlertView。除了我收到wait_fences:没有收到回复:U400lert视图中的取消按钮被按下时出现10004003错误消息时,这样可以正常工作。
代码如下。我不知道如何做到这一点,据我所知,代码看起来是正确的,应该可以工作,但显然它有问题。我希望另一组眼睛可以帮助找到问题。
__block bool theResult;
[self.mbProgressHUD showAnimated:YES whileExecutingBlock:^{
theResult = [someClass someMethodThatReturnsTRUEorFALSE];
} completionBlock:^{
[self.mbProgressHUD removeFromSuperview];
if (theResult) {
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView *theAlert....
[theAlert show];
});
};
}];
除非在UIAlert中选择了OK按钮,否则一切似乎都可以正常工作。我收到wait_fences:收不到回复:100040003错误消息。
非常感谢任何帮助。
答案 0 :(得分:0)
removeFromSuperview
直接影响视图层次结构,该层次结构计为触及UI。您无法从后台线程触摸UI。您还需要将[self.mbProgressHUD removeFromSuperview];
放到主队列中。