NSURLConnection多个异步连接

时间:2012-12-07 11:27:45

标签: objective-c asynchronous nsurlconnection

我试图找出为什么我的UI在我的所有NSURLConnections都已加载之后才更新。

我基本上正在加载一个“登录”请求,接收响应并调用:

[[NSNotificationCenter defaultCenter] postNotificationName:@"connectionFinishedLoading" object:[NSMutableDictionary dictionaryWithObject:dataForConnection forKey:conn.tag]]

我在代码的其他位置收到通知,并调用:

[self.loginViewController dismissViewControllerAnimated:YES completion:nil];

和NSLog一起,所以我知道它实际上是在正确的时间到达这个方法,只是视图控制器没有被解除,直到其他NSURLConnections基本上在隐藏对话框的同时开始完成

我最近几个小时一直在研究这个问题,我仍然不确定我用来创建/发送请求的代码是否异步工作:

-(void)initGET:(NSString *)url queryString:(NSString *)theQueryString tag:(NSString *)tag{
if([Utils CanConnectToURL:url]){
    //NSLog(@"url: %@", url);
    //NSLog(@"queryString: %@", theQueryString);
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@?%@", url, theQueryString]]];
    [request setHTTPMethod:@"GET"];
    [request setValue:@"application/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [request setTimeoutInterval:60*10];
    URLConnection *connection = [[URLConnection alloc] initWithRequest:request delegate:self startImmediately:YES tag:tag];
    if(connection){
        [receivedData setObject:[NSMutableData data] forKey:connection.tag];
        [conns addObject:connection];
    }
    else
        [receivedData setObject:NSLocalizedString(@"ConnectionError", nil) forKey:connection.tag];
}
else{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"NoInternetConnectionTitle", nil) message:NSLocalizedString(@"NoInternetConnectionMessage", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil];
    alert.tag = 999;
    [alert show];
}

}

我的猜测是它已经是同步的,因为我在第一个完成后直接启动了3个其他NSURLConnections,我的日志显示其他3个连接都是基本上同时启动,然后全部完成。如果它只是同步,当然,1个连接将开始,然后完成,然后第2个连接开始/结束,依此类推......

有没有人知道为什么我的UI无法正常更新?如果是这样的话,那将是一个很好的解决方法 - 我已经对NSOperationQueue进行了一些研究,但是在使用NSNotificationCenter传递消息/对象时,使用它似乎开始引起其他问题,我在URLConnectionManager类中使用了很多

谢谢!

麦克

1 个答案:

答案 0 :(得分:0)

URLConnection不是标准的NSURLConnection。如果没有看到URLConnection的实现,很难判断它是否是异步的。

另外,当您收到连接通知后,如何更新UI?