次のコードを使用して Web サービスに接続し、応答を取得しています。コードは問題なく動作します。接続デリゲート connectionDidFinishLoading を使用して結果を解析し、何らかのアクションを実行しています。
- (IBAction)signInTouchUpInside:(id)sender {
if (r == NO) {
if ([Utility internet]) {
[self.connection cancel];
self.json = [[NSMutableData alloc] init];
NSString* urlString = [NSString stringWithFormat:@"http://www.domain.com/signin?email=%@&password=%@", self.email.text, self.password.text];
NSURL* url = [NSURL URLWithString:urlString];
NSMutableURLRequest* urlRequest = [NSMutableURLRequest requestWithURL:url];
[urlRequest setHTTPMethod:@"GET"];
[urlRequest addValue:@"iphonekey" forHTTPHeaderField:@"key"];
self.connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
[self.connection start];
} else {
}
}
}
- (void)connectionDidFinishLoading:(NSURLConnection*)connection {
NSString* jsonString = [[NSString alloc] initWithData:self.json encoding:NSUTF8StringEncoding];
SBJsonParser* parser = [[SBJsonParser alloc] init];
NSDictionary* holder = [parser objectWithString:jsonString error:nil];
if ([[holder valueForKey: @"result"] boolValue]) {
} else {
}
}
- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response {
[self.json setLength:0];
}
- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data {
[self.json appendData:data];
}
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error {
NSLog(@"error %@", error);
}
今、私はいくつかの問題に直面しており、何をすべきかわかりません。複数のView Controllerで同じ接続を行う必要があるため、毎回同じことを繰り返すのではなく、接続を管理するクラスを作成する方がよいと思います。また、connectionDidFinishLoading で実行するアクションは Web サービスごとに異なるため、呼び出しごとにコールバックを構成する必要があります。どうやってやるの?
ps: 同時呼び出しはありません。