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 在显示网络活动指示器时未显示的主要内容,如果未能解决你的问题,请参考以下文章
SFSafariViewController 在推入 UINavigationController 时隐藏网络活动指示器