2011-09-28 2 views
0

Я пытаюсь просто создать MBProgressHUD, показать его, запустить синхронизацию или асинхронный запрос, нажать новый контроллер на UINavigationController и удалить указанный MBProgressHUD. Однако HUD не появляется, пока данные не будут получены. Есть только мерцание HUD. Я попытался сделать это асинхронно, но это то же самое. Есть идеи?ASIHTTPRequest startSynchronous callback не отображается/скрывается MBProgressHUD до/после получения данных

ASIFormDataRequest* request = [ASIFormDataRequest requestWithURL:url]; 
[request setPostValue:@"occ_get_images_by_tag" forKey:@"action"]; 
[request setPostValue:[NSString stringWithFormat:@"%@", tag_id] forKey:@"tag_id"]; 

//HUD is a property of the UIViewController 
HUD = [[MBProgressHUD alloc] initWithView:self.view]; 
[self.view addSubview:HUD]; 
HUD.delegate = self; 

//Tried messing with this, making a message and changing onTarget: to self 
//didn't work 
[HUD showWhileExecuting:@selector(startSynchronous) onTarget:request withObject:nil animated:YES]; 

[request startSynchronous]; 

NSError* error = [request error]; 
if(!error){ 
    NSArray* tempArr = [[request responseString] objectFromJSONString]; 
    // Do some stuff 
    [self.navigationController pushViewController:imtv animated:YES]; 
    [HUD removeFromSuperview]; 
}else{ 
    NSLog(@"%@", [error description]); 
} 

Мое понимание того, как работает ASIHTTPRequest в том, что вещи, которые происходят, прежде чем startSynchronous действительно произойдет до того, как называется это сообщение. Затем все, что происходит внутри ошибки if (!), Произойдет после того, как данные будут получены и готовы к обработке. Кажется, что обратный вызов вообще не работает.

Также, если это какая-либо помощь, все это происходит в tableView: didSelectRowAtIndexPath :.

ответ

3

Вы не сможете использовать MBProgressHUD в основном потоке приложения. Если вы хотите, чтобы это работало в вашем примере кода, используйте делегатов ASIHTTPRequest, и вы сможете увидеть MBProgressHUD

+0

Удивительная благодарность! Я должен был поднять вопрос о потоке, в полной мере. Я изменил его на запрос asynch и использовал requestStarted: and requestFinished: чтобы показать/скрыть индикатор прогресса. Работает безупречно. – rnystrom