0

我有一个方法从通讯簿获取联系人并与他们做一些东西(“getContactInformation”)在方法持续时间内显示MBProgressHUD

这个过程有点长(几秒),并在此过程后,我显示一个新的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]; 

它不工作(它不显示的指标)。任何人都可以帮助我?

预先感谢您

回答

1

保持独立的方法[self presentViewController:newController animated:NO completion:nil];。并尝试在某些延迟后调用该方法。这应该解决问题。

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)。