0

ここでは、 SBJsonフレームワークを使用して非同期呼び出しをPythonサーバーに送信しようとしました。同じリクエストでの連続した複数の呼び出しのnull場合、応答文字列に値を指定します。

ここで、私が試したこと:

- (NSURLConnection *) GetHttpConnection:(NSString *)Path:(NSDictionary *)requestData:(UIView *)appView {
    NSString *jsonReq = nil;
    NSData *reqData = nil;

    if (requestData != nil) {
        jsonReq = [requestData JSONRepresentation];
        reqData=[NSData dataWithBytes:[jsonReq UTF8String] length:[jsonReq length]];
    }
    NSString *urlString = [NSString stringWithFormat:@"%@/%@", URL, Path];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    if (reqData) {
        [request setHTTPBody:reqData];
    }
    [request setHTTPMethod:@"POST"];
    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
    if (connection) {
        responseData = [[NSMutableData data] retain];
    }
    return connection;
 }

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    [connection release];
    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    NSLog(@"Connection Finish Loading >>>>> %@",responseString);    
    responseData = nil;
    if (responseString && [responseString JSONValue] != nil) {
       // process response string and send response back to delegate method
    }
  }


- (void)connection:(NSURLConnection *)connection didReceiveData:(NSMutableData*)data {
    [responseData appendData:data];
}

応答をトレースした後NSlog、これを見つけました。同じリクエストを3回送信すると([詳細の更新]ボタンを押して) connectionDidFinishLoading、3回呼び出す必要があり、それを呼び出しています。ただし、任意の(1つの)要求に対して、それぞれの応答データはを返しますnull。そのため、JSONは以下のように述べています

JSONValueが失敗しました。エラートレースは次のとおりです:( "Error Domain = org.brautaset.JSON.ErrorDomain Code = 11 \" Unexpected end of string \ "UserInfo = 0x909d4b0 {NSLocalizedDescription = Unexpected end ofstring}"

このシナリオをどのように克服できますか?またはコードに何か問題がありますか?

ありがとう!

4

1 に答える 1

0

responseDataへの参照は1つしかないため、クラスは再入可能ではありません。2つのリクエストが同時に実行されると、悪いことが起こります。これを機能させるには、リクエストデータをNSURLConnectionでキー設定されたディクショナリに配置するか、リクエストごとにダウンローダーの別のインスタンスを作成する必要があります。

于 2012-12-12T15:01:21.343 に答える