0

私は方法を持っていますrefreshDataAction

- (void)refreshDataAction
{
    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    hud.labelText = @"Loading Data.Please Wait";
    [self deletePreviousValues];
    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
        NSLog(@"Getting customer values");
        [self getAllCustomerValues];
        NSLog(@"Got customer values");

        NSError *nwerror = nil;
        if (![self.secondMOC save:&nwerror])
        {
            NSLog(@"209 Failed to save second MOC");
        }
        else
        {
            //NSLog(@"saved success");
        }
        dispatch_async(dispatch_get_main_queue(), ^{
            [MBProgressHUD hideHUDForView:self.view animated:YES];
        });
        NSLog(@"Saved");
    });

    NSLog(@"Dispatched");   
}

開始するとすぐにrefreshDataAction、HUD が表示されるはずです。しかし、HUD を表示する前に 13 秒待つようなものではありません。なぜそのようなことが起こっているのか、私にはわかりません。ActivityIndi​​cator のような別のものを試しましたが、役に立ちませんでした。アプリが hud を開始するのに 13 秒待機するのはなぜですか。シミュレーターではその瞬間。ボタンをクリックすると、HUD が表示されます。しかし、デバイスでは13秒の遅延。バックグラウンド スレッドが何らかの作業を行っている間、すぐに hud を開始します。助けてください。このタスクを実行する方法を考え出すのに 5 時間を費やしました。

ここに私の質問があります:バックグラウンドのスレッドがデータをロードしている間に UIAlertview がハングする

に変更しましたMBProgressHUD。一緒に仕事をしたことのある開発者は、MBProgressHUDこの問題に気付くかもしれません。

私のメイン UI スレッドは 13 秒間何らかのスリープ モードになっていますか? この時点では本当にわかりません。参考までに、それは iOS 6.0 です。これは社内の iPad アプリです。さらに情報が必要な場合は、お問い合わせください。ありがとうございます

4

1 に答える 1

0

viewDidLoadに以下を追加します。

HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
[self.navigationController.view addSubview:HUD];
HUD.delegate = self;
HUD.labelText = @"";
HUD.mode = MBProgressHUDModeIndeterminate;

次に、dispatch_get_main_queue()を使用せずに、次のメソッドを呼び出すだけです。

[HUD show:YES];

と...

[HUD hide:YES];
于 2013-02-21T22:42:18.890 に答える