0

Web サーバーにセットアップしたバックエンド API に Web 要求を送信しようとしています。ただし、物事を普遍的にするために、JSON オブジェクト全体をバックエンドに送信し、そこでデータのフィルタリングをすべて実行して、リクエストの目的、渡す引数などを判断したいと考えています。

あるクラスからさまざまなサービスに多くのリクエストを送信するため、完了ハンドラーですべての結果をフィルター処理して、最初にフェッチされたリクエストを特定する必要があるため、NSURLConnection を使用したくありません。

NSURLConnection を使用してこのように JSON オブジェクトをアタッチできるようにする方法が気に入っていますが、別の方法でそれを行う方法を知りたいです ([NSData dataWithContentsOfURL:] など)。

NSMutableDictionary *postObject = [[NSMutableDictionary alloc] init];
[postObject setValue:@"login" forKey:@"request"];
[postObject setValue:inputUsername.text forKey:@"userName"];
[postObject setValue:inputPassword.text forKey:@"password"];

NSData *postData = [NSJSONSerialization dataWithJSONObject:postObject options:0 error:NULL];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"WEB_URL"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
[request setTimeoutInterval:20];

助言がありますか?

4

1 に答える 1

1

これを行う方法は、NSURLConnection を含む NSObject クラスを作成し、クラスにプロパティ タグを設定することです。次に、ダウンロードが終了したときに、接続を含む NSObject/NSURLConnection クラスをデリゲートに返します。デリゲートで返信を処理するために、以下の -(void)downloadFinished の例のようなメソッドがあります。

NSObject クラスでは、NSJsonSerialization を使用して NSDictionary を Json に変換し、それを NSURLConnection に追加します。

Github の JsonHelper クラスにリンクできればいいのですが、まだ Github にアップロードしていません :(.

リクエストの例:

NSDictionary *post = [NSDictionary dictionaryWithObjectsAndKeys:@"Json_Value",@"Json_Key",nil];

JsonHelper *jsonHelper = [[JsonHelper alloc]initWithURL:@"http://mycoolwebservice.com" withDictionary:post
withMethod:@"POST" showIndicator:NO withDelegate:self withCache:NO];
[jsonHelper setTag:1];
[jsonHelper connectionStart];

代理返信の例:

-(void)downloadFinished:(id)sender
{
   if ([sender isKindOfClass:[JsonHelper class]]) {

    NSError *error = nil;
    JsonHelper *jsonHelper = (JsonHelper*)sender;
        NSData *data = [[NSData alloc]initWithData:jsonHelper.receivedData];
        NSString *returnString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];    

    if (jsonHelper.tag == 0) {

    // Do Something
    }

    else if (jsonHelper.tag == 1) {

    // Do Something Else
    }
  }    
}

この例を使用して、多かれ少なかれ同じことを行う独自のカスタム クラスを作成することはそれほど難しくありません。

于 2013-03-21T22:44:20.897 に答える