NSURLConnection异步请求并在满足请求时显示“正在加载”警报视图或子视图

时间:2011-11-29 17:07:51

标签: iphone objective-c ios nsurlconnection

我正在尝试找出执行NSURLConnection异步请求的最佳方式,并在完成请求时让UI屏蔽警报视图。我在使用同步请求时遇到了很多麻烦,因为我无法弄清楚如何在同步请求中有效地使用多线程功能或操作队列,所以我认为这是最好的方法。伪代码或实际代码很好,我只需知道要去哪个方向。到目前为止,我想:

  • 创建UIAlertView属性
  • 创建一个启动NSURLConnection的void函数,并在启动后立即显示视图
  • 使用委托方法关闭AlertView窗口-(void)connectionDidFinishLoading或类似的东西。

是这么简单,还是我错过了什么?

2 个答案:

答案 0 :(得分:1)

最简单的方法可能是使用UIApplication.networkActivityIndi​​catorVisible属性,并在后台线程中执行同步请求。

-(void)loadURLInBackground:(NSURL*)url {

    NSURLRequest* req = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];

    NSURLResponse* response = nil;
    NSError* err = nil;

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;


    NSData* data = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&err];

    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    if( data != nil ) { 
        [self performSelectorOnMainThread:@selector(processData:) withObject:data waitUntilDone:NO];
     } else {
        [self performSelectorOnMainThread:@selector(processError:) withObject:err waitUntilDone:NO];
     }
}

使用[self performSelectorInBackground:@selector(loadURLInBackground:) withObject:url];来调用该方法,然后只需实施processData:processError:

答案 1 :(得分:0)

您不想使用UIAlertView - 这是一个模态对话框。

您希望在后台活动进行时使用UIActivityIndi​​catorView之类的东西来显示微调器。

然后,正如您所说,您的委托方法可以停止动画活动指示器视图。

如果您想显示“正在下载...”这样的消息,那么您可以将活动指示器包装在另一个视图中,显示该视图,并在委托回拨时将其删除。