0

アドレス帳から連絡先を取得し、それらを使用していくつかのことを行う方法があります("getContactInformation")

このプロセスは少し長く (数秒) あり、このプロセスの後、新しいViewController. ユーザーにとって使いやすいものにするために、MBProgressHUDを使用して、プロセスの開始時にアクティビティ インジケーターを表示し、最後にそれを非表示にしたいと考えています。

それを行う最良の方法はどれですか?私はこれをテストしました:

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.labelText = @"Retrieving information...";

[self getContactInformation];

[MBProgressHUD hideHUDForView:self.view animated:YES];

[self presentViewController:newController animated:NO completion:nil];

しかし、機能しません(インジケーターが表示されません)。誰でも私を助けることができますか?

前もって感謝します

4

2 に答える 2

1

の別のメソッドを保持し[self presentViewController:newController animated:NO completion:nil];ます。そして、特定の遅延の後にそのメソッドを呼び出してみてください。それは問題を解決するはずです。

于 2012-08-06T08:00:20.317 に答える
1
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
    [self getContactInformation];
    dispatch_async(dispatch_get_main_queue(), ^{
        [MBProgressHUD hideHUDForView:self.mapView animated:YES];
    });
});

これにより、getContactInformation を実行するスレッドが生成され、UI の変更 (HUD の表示など) に必要なメイン スレッドはブロックされません。

連絡先情報を取得したときにメイン スレッドがロックされており、HUD を表示するために更新する時間がないと推測しています。メソッドが完了すると、再びメイン スレッドを取得して UI を更新します (HUD を削除します)。

于 2012-12-21T15:32:56.697 に答える