2012-03-24 5 views
0

Я играю с MBProgressHUD. worflow в ViewController (Tableview) проходит так:MBProgressHUD не показывать

1) IBAction вызывается для переключения между 2 разными таблицами 2.1) Функцией reloadAllMonth вызывается (инициализирует массив с данными для новой таблицы) 2.2) MBProgressHUD * HUD должен отображаться 3) reloadAllMonth закончена 4) HUD должны исчезнуть

мой текущий код:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 

     //sparing you the code that determins where the tap occured 

     HUD = [[MBProgressHUD alloc]initWithFrame:self.view.frame]; 
     [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
     [self reloadAllMonth]; 
     allMonthIsActive = YES; 
     [MBProgressHUD hideHUDForView:self.view animated:YES]; 

// some other code table reload etc. 
} 

что происходит:

-> функция touchesbegan не вызывается -> ничего не происходит в течение 3-4 секунд (время загрузки) -> новая таблица выскакивает

вопрос: почему HUD не появляются? Где я неправ ?

ответ

2

Вы не можете иметь оба шоу и спрятаться в том же потоке, это то, что я хотел бы сделать:

-(void)reloadStuff 
{ 
    [self reloadAllMonth]; 
    allMonthIsActive = YES; 
    [MBProgressHUD hideHUDForView:self.view animated:YES]; 
    isLoading = NO; 
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    //sparing you the code that determins where the tap occured 

    if (isLoading) 
     return; 
    isLoading = YES; 
    [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
    [self performSelectorInBackground:@selector(doStuff) withObject:nil]; 
} 

Также вы можете удалить Ивар HUD, вы не используете его.

И не забудьте инициализировать isLoading в viewDidLoad к NO:

isLoading = NO; 

Успехов!

+0

Я изменил свой код на ваше предложение, но он ничего не меняет. HUD все еще не показывает. Я обновил код вопросов до нового. –

+0

Ответ проверен – Zalykr

+0

Это была моя абсолютная первая идея и код. проблема заключается в следующем: метод reloadAllMonth затем выполняется в backgroundthread. таким образом, основной поток запускается и начинает рисовать таблицу. tableview нуждается в загрузке данных в reloadAllMonth. поэтому таблица начинает рисовать до того, как ее данные будут доступны, таким образом, приложение завершится с ошибкой =) –

0

Вы ничего не получаете от сервера? Если да, проверьте, проходит ли синхронный запрос или асинхронный. Асинхронные запросы лучше всего следовать. Ручка MBProgressBar таким образом.

[MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      //Any UI updates should be made here . 
       [MBProgressHUD hideHUDForView:self.view animated:YES]; 
     }); 
Смежные вопросы