我的大部分数据都来自网络服务,这可能需要相当长的时间。特别是在较小的网络上。
屏幕呈黑色。我可以从 NSLogs 看到数据正在沿着管道传播,但指示器没有显示。然后,当它出现时,指示器会短暂弹出然后消失。
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[HUD showUIBlockingIndicatorWithText:@"Fetching DATA"];
[self callDatabase];
[HUD hideUIBlockingIndicator];
}
最佳答案
听起来您的[self callDatabase]
方法可能会阻塞主线程。当主线程被阻止时,对 View 层次结构的修改将不会反射(reflect)在屏幕上。可以把数据库工作放在后台吗?也许像这样:
[HUD showUIBlockingIndicatorWithText:@"Fetching DATA"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self callDatabase];
dispatch_async(dispatch_get_main_queue(), ^{
[HUD hideUIBlockingIndicator];
});
});
这将导致 callDatabase
方法在后台运行,而不会阻塞主线程。然后,当数据库工作完成时,HUD 将隐藏在主线程上。请注意,仅在主线程上修改 View 层次结构(通常是“执行 UI 工作”)非常重要。
关于ios - 为什么HUD不显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22108817/