我有一种方法可以从地址簿中获取联系人并使用(“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];
但是它不起作用(它没有显示指标)。有人可以帮帮我吗?
提前谢谢
答案 0 :(得分:1)
为[self presentViewController:newController animated:NO completion:nil];
保留一个单独的方法。并尝试在特定延迟后调用该方法。这应该是解决问题。
答案 1 :(得分: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)。