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 回答