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 に答える