0

MBProgressHUDを作成して表示し、同期または非同期リクエストを開始し、UINavigationControllerに新しいコントローラーをプッシュし、MBProgressHUDを削除しようとしています。ただし、HUD はデータを受信するまで表示されません。HUDのちらつきだけあります。これを非同期でやってみましたが、まったく同じことができました。何か案は?

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(!error) 内のすべてが発生します。コールバックがまったく機能していないようです。

また、それが役立つ場合、これはすべて tableView:didSelectRowAtIndexPath: で行われます。

4

1 に答える 1

3

アプリケーションのメイン スレッドで MBProgressHUD を使用することはできません。サンプル コードでこれを機能させたい場合は、ASIHTTPRequest のデリゲートを使用すると、MBProgressHUD を確認できます。

于 2011-09-28T04:57:57.357 に答える