すべての NSURLConnections が読み込まれるまで UI が更新されない理由を理解しようとしています。
私は基本的に1つの「ログイン」リクエストをロードし、レスポンスを受け取り、呼び出しています:
[[NSNotificationCenter defaultCenter] postNotificationName:@"connectionFinishedLoading" object:[NSMutableDictionary dictionaryWithObject:dataForConnection forKey:conn.tag]]
コードの別の場所で通知を受け取り、次のように呼び出します。
[self.loginViewController dismissViewControllerAnimated:YES completion:nil];
NSLogと一緒に、実際に適切なタイミングでこのメソッドに到達していることを知っています.View Controllerは、ダイアログが非表示になると同時に基本的に開始される他の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];
}
}
私の推測では、最初の NSURLConnections が終了した直後に他の 3 つの NSURLConnections を開始するため、既に非同期であると考えられます。ログには、他の 3 つの接続がすべて基本的に同時に開始され、その後すべてが完了することが示されています。同期のみの場合、確かに、1つの接続が開始され、次に終了し、次に2番目の接続が開始/終了する...
私のUIが適切に更新されなかった理由を知っている人はいますか? もしそうなら、どのような良い回避策があるでしょうか - すでに NSOperationQueue を少し見てきましたが、これを使用すると、URLConnectionManager クラスでかなり使用する NSNotificationCenter を使用してメッセージ/オブジェクトを渡すときに他の問題が発生し始めるようです。 .
ありがとう!
マイク