MBProgressHud 在显示网络活动指示器时未显示

Posted

技术标签:

【中文标题】MBProgressHud 在显示网络活动指示器时未显示【英文标题】:MBProgressHud not showing when network activity indicator is showing 【发布时间】:2013-04-26 21:59:43 【问题描述】:

我正在使用表格视图并尝试显示 MBProgressHud 以显示需要很长时间才能呈现模式(2.5 秒)的单元格选择。

这是我开始 MBProgressHud 的方式:

- (void)showProgressHud

    dispatch_async(dispatch_get_main_queue(), ^
        [MBProgressHUD showHUDAddedTo:self.streamTableView animated:YES];
    );


- (void)hideProgressHud

    dispatch_async(dispatch_get_main_queue(), ^
        [MBProgressHUD hideHUDForView:self.streamTableView animated:YES];
    );

我注意到只有在网络活动指示器不旋转时才会显示进度 HUD。

在重新加载表时网络变为活动状态(使用 Restkit 0.20.0)。我已将 AFNetworking 配置为在打开连接时启动活动指示器。

我已验证,如果我禁用活动指示器,问题不会消失:

[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:NO];

我真的很希望能够以任何一种方式保持启用该选项。有什么建议吗?

【问题讨论】:

【参考方案1】:

您似乎在主线程上运行网络代码,并且在完成之前会阻止任何 UI 更新。检查您在单元格选择/重新加载后如何启动网络连接,并确保它正在排队到后台线程。活动指示器与您的应用程序代码完全分开(实际上它在不同的线程上运行,这就是它工作的原因,并且不受您的应用程序 UI 的影响)。

【讨论】:

【参考方案2】:

看起来网络活动指示器正在占用 MBProgressHud 使用的运行循环。

我最终使用this 技术让 MBProgressHud 有时间在指标再次占用循环之前显示。

- (void)showProgressHud

    dispatch_async(dispatch_get_main_queue(), ^
        [MBProgressHUD showHUDAddedTo:self.streamTableView animated:YES];
        [[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]];
    );

【讨论】:

以上是关于MBProgressHud 在显示网络活动指示器时未显示的主要内容,如果未能解决你的问题,请参考以下文章

从服务器获取数据时如何显示活动指示器

在状态栏中隐藏活动指示器[重复]

iOS 网络活动指示器未显示

Alamofire 网络活动指示器未显示

SFSafariViewController 在推入 UINavigationController 时隐藏网络活动指示器

向导航栏添加活动指示器