ASIHTTPRequest startSynchronous回调未在接收数据之前/之后显示/隐藏MBProgressHUD

时间:2011-09-28 04:38:07

标签: objective-c uitableview asihttprequest mbprogresshud

我正在尝试简单地创建一个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:。

1 个答案:

答案 0 :(得分:3)

您将无法在应用程序的主线程上使用MBProgressHUD。如果您想在示例代码中使用它,请使用ASIHTTPRequest的委托,您将能够看到MBProgressHUD