2011-09-28 16 views
0

MBProgressHUDを作成、表示、同期または非同期要求を開始し、UINavigationControllerで新しいコントローラをプッシュし、MBProgressHUDを削除しようとしています。ただし、HUDはデータが受信されるまで表示されません。 HUDのちらつきしかありません。私はこれを非同期でやってみましたが、それはまったく同じことでした。何か案は?ASIHTTPRequest start同期コールバックがデータの受信前/受信後に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

素晴らしい感謝!私はスレッドの問題で拾って、全然意味があるはずです。私はそれを非同期リクエストに変更し、requestStarted:およびrequestFinished:を使用して進行状況インジケータを表示/非表示にしました。完璧に動作します。 – rnystrom