我有一个方法refreshDataAction
:
- (void)refreshDataAction
{
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.labelText = @"Loading Data.Please Wait";
[self deletePreviousValues];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
NSLog(@"Getting customer values");
[self getAllCustomerValues];
NSLog(@"Got customer values");
NSError *nwerror = nil;
if (![self.secondMOC save:&nwerror])
{
NSLog(@"209 Failed to save second MOC");
}
else
{
//NSLog(@"saved success");
}
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.view animated:YES];
});
NSLog(@"Saved");
});
NSLog(@"Dispatched");
}
所以一旦refreshDataAction
启动,我就会看到HUD。但这不像是等了13秒才显示HUD。我不知道为什么会这样。我尝试了不同的一个,比如ActivityIndicator,但没有用。为什么我的应用程序要等13秒才能启动hud。在模拟器上它的瞬间。我点击按钮,看到HUD。但在设备上延迟了13秒。当后台线程正在做一些工作时,立即启动hud。请帮忙。花了整整5个小时想办法完成这项任务。
这里有我的问题:UIAlertview在后台线程加载数据时挂起
我把它改成了MBProgressHUD
。可能是一些使用过MBProgressHUD
的开发人员看到了这个问题。
我的主UI线程是否处于某种睡眠模式13秒?我真的不知道这一点。仅供参考,它在iOS 6.0中。这是一个内部的iPad应用程序。如果你需要更多信息,一定要问。感谢
我会将以下内容添加到您的viewDidLoad中。
HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
[self.navigationController.view addSubview:HUD];
HUD.delegate = self;
HUD.labelText = @"";
HUD.mode = MBProgressHUDModeIndeterminate;
然后,您可以在不使用dispatch_get_main_queue()的情况下简单地调用以下方法。
[HUD show:YES];
而且。。。
[HUD hide:YES];