为什么HUD没有显示?

时间:2014-03-01 01:16:27

标签: ios objective-c mbprogresshud

我的大部分数据来自网络服务,可能需要相当多的时间。特别是在较小的网络上。

屏幕呈现黑色。我可以从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];
    }

1 个答案:

答案 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工作”)非常重要。