1

我有一些在块(完成块)中运行的简单代码。在完成块中,如果块中的进程返回 FALSE,我想显示一个 UIAlertView。作为最佳实践,您不应该在后台线程中调用任何 UI 方法,因此我使用 dispatch_get_main_queue 来显示 UIAlertView。这可以正常工作,除了当按下 UIAlert 视图中的取消按钮时我收到 wait_fences: failed to receive reply: 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: failed to receive reply: 100040003 错误消息。

任何帮助将不胜感激。

4

1 回答 1

0

removeFromSuperview直接影响视图层次结构,这算作触摸 UI。您无法从后台线程触摸 UI。您还需要放入[self.mbProgressHUD removeFromSuperview];主队列。

于 2012-10-02T19:14:28.733 回答