让iOS不要等到整个方法完成才能开始动画

时间:2013-02-21 22:35:20

标签: ios delay mbprogresshud background-thread

我有一个方法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。但没有它像在显示HUD之前等待13秒。我不知道为什么会这样。我尝试过不同的ActivityIndi​​cator,但无济于事。为什么我的应用程序等待13秒才能启动hud。在模拟器上它的瞬间。我点击按钮,我看到了HUD。但在设备上13秒延迟。在后台线程正在做一些工作时立即启动hud。请帮忙。花了整整5个小时来确定完成这项任务的方法。

我的问题在这里:UIAlertview hanging while the thread in background is loading data

我将其更改为MBProgressHUD。可能是一些与MBProgressHUD合作过的开发人员可能会看到这个问题。

我的主UI线程是否处于某种睡眠模式13秒?我现在真的不知道。仅供参考,它在iOS 6.0中。这是一款内部iPad应用程序。如果您需要更多信息,请询问。谢谢

1 个答案:

答案 0 :(得分:0)

我将以下内容添加到您的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];