2013-02-21 10 views
0

У меня есть метод refreshDataAction:Сделать IOS не ждать, пока весь метод не будет завершен, чтобы начать анимацию

- (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 начинается я должен увидеть ИЛС. Но это не похоже на ожидание 13 секунд, прежде чем показывать HUD. Я понятия не имею, почему так происходит. Я попробовал другой, как ActivityIndicator, но безрезультатно. Почему мое приложение ждет 13 секунд, чтобы запустить хад. На симуляторе его мгновение. Я нажимаю кнопку, и я вижу HUD. Но на устройстве 13-секундная задержка. Начните хад сразу, когда фоновый поток выполняет некоторую работу. Пожалуйста помоги. Проводили все 5 часов, выясняя способы выполнения этой задачи.

Существует мой вопрос здесь: UIAlertview hanging while the thread in background is loading data

Я изменил его MBProgressHUD. Может быть, некоторые разработчики, которые работали с MBProgressHUD, могли видеть эту проблему.

Является ли мой основной поток пользовательского интерфейса каким-то спящим режимом в течение 13 секунд? На самом деле я не знаю. FYI, это в iOS 6.0. Это домашнее приложение для iPad. Если вам нужна дополнительная информация, спросите. Спасибо

+0

Почему вы создать дубликат вашей ранее вопрос? Все, что вы сделали, заменяет вид предупреждения на «MBProgressHUD». Не является причиной проблемы. – rmaddy

+0

Возможный дубликат [UIAlertview висит, когда поток в фоновом режиме загружает данные] (http://stackoverflow.com/questions/15010458/uialertview-hanging-while-the-thread-in-background-is-loading-data) – rmaddy

ответ

0

Я добавил бы к вашему видуDidLoad следующее.

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];