Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么HUD不显示?_Ios_Objective C_Mbprogresshud - Fatal编程技术网

Ios 为什么HUD不显示?

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

我的大部分数据都来自web服务,这可能需要相当长的时间。尤其是在较小的网络上

屏幕是黑色的。我可以从NSLogs中看到数据正在向下传播,但指示器没有显示。然后,当它是sone时,指示灯会短暂弹出,然后消失

  - (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确保主线程上正在调用initial
showUIBlockingIndicator with text:
,以便它可以更改UI。您可以将所有内容包装在另一个
dispatch\u async(dispatch\u get\u main\u queue(),^{…})中如果此代码最初是从另一个线程调用的。