2012-11-27 2 views
0

여기에서 SBJson framework을 사용하여 비동기 호출을 파이썬 서버에 보냈습니다. 동일한 요청으로 연속 다중 호출의 경우 응답 문자열에 null 값을 제공하십시오. 내가 뭘하려 여기Iphone-SBJson은 다중 요청 전송에서 늦은 응답을받는 연결에 대해 null responseData를 반환합니다.

: 나는 같은 요청을 보내면,이, 을 발견

- (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 실패했습니다. 오류 추적은 다음과 같습니다 ( "오류 도메인 = org.brautaset.JSON.ErrorDomain 코드 = 11 \"문자열 \의 예기치 않은 종료 "사용자 정보 = 0x909d4b0 {문자열의 NSLocalizedDescription = 예기치 않은 끝}"

어떻게 나는이 시나리오에서 극복? 또는 코드에 문제가 있나요?

감사합니다!

+0

당신도'- (void) connection : (NSURLConnection *) connection didReceiveData : (NSData *) data' 위임 메소드를 구현하고 있습니까? 나는 그것을 볼 수 없다. – lupatus

+0

@Yajushi, FYI'requestData'의 여는 중괄호는 닫히지 않는다. – vladr

+0

편집을 확인하십시오. – Yajushi

답변

0

클래스하지 재입는 드 responseData 만 하나의 참조있다 같습니다. 두 요청이 동시에 나쁜 일에 실행하는 경우 이 일을하려면 NSURLConn에 의해 keyed 된 사전에 requestData를 넣거나 각 요청에 대해 다운로더의 다른 인스턴스를 생성하십시오.

+0

Stig, 고맙습니다. – Yajushi