我的大部分数据来自网络服务,可能需要相当多的时间。特别是在较小的网络上。
屏幕呈现黑色。我可以从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];
}
答案 0 :(得分:2)
听起来你的[self callDatabase]
方法可能会阻塞主线程。当主线程被阻止时,对视图层次结构的修改将不会反映在屏幕上。你能把数据库工作在后台吗?也许是这样的:
[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将隐藏在主线程上。请注意,仅在主线程上修改视图层次结构(通常,“执行UI工作”)非常重要。