0

コードを使用してメソッドを呼び出し、HUDを次のように表示しています

    HUD = [[MBProgressHUD alloc] initWithView:self.view];
[self.view addSubview:HUD];

HUD.delegate = self;
HUD.labelText = @"Signing you up";

// myProgressTask uses the HUD instance to update progress
[HUD showWhileExecuting:@selector(processFieldEntries) onTarget:self withObject:nil animated:YES];

processFieldEntries内で、ダイアログを表示するエラーチェックがあります。以下のように:

showDialog:
if (textError) {
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:errorText message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
    [alertView show];
    return;
}

これにより、おそらく同じスレッド上にあるか、ビューからHUDが削除されていないために、クラッシュが発生します。

私の質問は、異なるスレッドで実行されるように、異なるコードを追加する必要があるかどうかです。そして、showWhileExecuting ...と呼ばれるHUDを削除するには、processFieldEntriesメソッドに何を追加する必要がありますか。

4

1 に答える 1

2
    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    hud.delegate = self;
    hud.labelText = @"Signing you up";
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.05 * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        [self processFieldEntries];
        // Do something...
        [MBProgressHUD hideHUDForView:self.view animated:YES];
        });
于 2012-09-02T21:09:22.790 に答える