Iphone NSURLConnection异步请求并显示一个";“装载”;执行请求时发出警报视图或子视图

Iphone NSURLConnection异步请求并显示一个";“装载”;执行请求时发出警报视图或子视图,iphone,objective-c,ios,nsurlconnection,Iphone,Objective C,Ios,Nsurlconnection,我试图找出执行NSURLConnection异步请求的最佳方式,并在请求完成时用警报视图屏蔽UI。我在处理同步请求时遇到了很多麻烦,因为我不知道如何在同步请求中有效地使用多线程功能或操作队列,所以我认为这是最好的方法。伪代码或实际代码都可以,我只需要知道该往哪个方向走。到目前为止,我认为: 创建UIAlertView属性 创建一个void函数来启动NSURLConnection,并在启动后立即显示视图 使用委派方法关闭AlertView窗口-(void)ConnectionIDFinishLo

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

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

是这么简单,还是我遗漏了什么?

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

您希望使用UIActivityIndicatorView之类的工具在后台活动进行时显示微调器

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


如果要显示“正在下载…”之类的消息,则可以将活动指示器包装在另一个视图中,显示该视图,并在代理回调时将其删除。

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

-(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];
     }
}
使用对象为url的[self-performSelectorInBackground:@selector(loadURLInBackground:)调用该方法,然后只需实现
processData:
processError: