NSURLConnection および NSURLConnectionDelegate プロトコルを使用して、iPhone クライアントから入力されたユーザー名とパスワードを含む URL をサーバーに投稿しています。サーバーが URL を受信すると、サーバー上で提供される Web サービスは、JSON 形式でいくつかのデータを取り込み、iPhone クライアントに送り返します。
私の WebserviceDelegate クラスは NSURLConnectionDelegate プロトコルを使用します。
@implementation WebserviceDelegate
- (id)initWithURL:(NSURL *)url
{
if (self = [super init])
{
responseData = [NSMutableData data];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
connection = [NSURLConnection connectionWithRequest:request delegate:self];
[connection start];
}
return self;
}
...
@end
ここで、サーバーから取得した応答が、ログインしているかどうかを示していることを確認したいと思います。これを行うために、Web サービスによって送信されるデータには、「ステータス」と呼ばれる辞書キーが含まれます。「status」が「true」の場合、ログインが成功したことを意味します。「false」が表示された場合は、ログインに失敗したことを意味します。
しかし、iPhone側では、上記のロジックを実装する方法がわかりません:
リクエストは非同期であるため、自己定義メソッドでステータス キーを確認しようとすると、null 値が返されます。(responseDict は .h ファイルで定義された変数であり、その値は
(void)接続:(NSURLConnection *)接続didReceiveData:(NSData *)データ
私の WebserviceDelegate クラスで)
NSString *status = [responseDict objectForKey:@"status"];
NSLog(@"status = %@", status);
if ([@"true" isEqualToString:status]) {
return YES;
}
else {
return NO;
}