我试图找出为什么我的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类中使用了很多
谢谢!
麦克
答案 0 :(得分:0)
URLConnection不是标准的NSURLConnection。如果没有看到URLConnection的实现,很难判断它是否是异步的。
另外,当您收到连接通知后,如何更新UI?