Ios 为什么HUD不显示?
我的大部分数据都来自web服务,这可能需要相当长的时间。尤其是在较小的网络上 屏幕是黑色的。我可以从NSLogs中看到数据正在向下传播,但指示器没有显示。然后,当它是sone时,指示灯会短暂弹出,然后消失Ios 为什么HUD不显示?,ios,objective-c,mbprogresshud,Ios,Objective C,Mbprogresshud,我的大部分数据都来自web服务,这可能需要相当长的时间。尤其是在较小的网络上 屏幕是黑色的。我可以从NSLogs中看到数据正在向下传播,但指示器没有显示。然后,当它是sone时,指示灯会短暂弹出,然后消失 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [HUD showUIBlockingIndica
- (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]
方法可能阻塞了主线程。当主线程被阻止时,对视图层次结构的修改将不会反映在屏幕上。你能把数据库工作放在后台吗?也许是这样的:
[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将隐藏在主线程上。请注意,修改视图层次结构(通常是“DoUI工作”)很重要仅在主线程上。这实际上会导致加载数据所需的时间更长,并且HUD仍然无法显示它在iAction上设置而不是在viewdidload@Raymond尝试将其放入视图将显示:
而不是viewdiload
@Raymond原因是callDatabase可能会很快完成,并且在视图完成时显示hud已被隐藏。@Raymond确保主线程上正在调用initialshowUIBlockingIndicator with text:
,以便它可以更改UI。您可以将所有内容包装在另一个dispatch\u async(dispatch\u get\u main\u queue(),^{…})中代码>如果此代码最初是从另一个线程调用的。