ios - 为什么HUD不显示?

标签 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];
    }

最佳答案

听起来您的[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/

相关文章:

iphone - 从一个 ViewController 导航到另一个 ViewController

ios - MBProgress HUD 没有显示正确的模式总是默认模式

iOS核心动画放大和缩小

ios - 无法在iOS10中以编程方式进行本地调用

iOS - 为什么我的 UIAlertView 上的底部项目是粗体?

objective-c - 为架构 i386 : After updating Yosemite and Pod install 定义的符号

ios - MBProgressHUD 无法覆盖键盘

ios - 如何将 MBProgressHUD 的位置固定在 UITableView 的中心

objective-c - 低 alpha View - 高 alpha subview

ios - swift - 如何从服务器获取 JSON 响应