2014-01-11 8 views
0

내 응용 프로그램에서 서버와의 연결을 설정하고 서버에서 JSON 데이터를 가져 오십시오. 요청을 보내면 잠시 후 JSON 개체가 서버에서 생성되고 클라이언트 (app)로 다시 전송됩니다. 하지만 문제는 10 번 중 2 번, 데이터가 서버에서 전송 된 경우에도 클라이언트에서 NULL 값을 얻게됩니다. NULL data but a JSON data since 모든 요청에 ​​대해 데이터가 생성되지 않습니다.NSURLConnection은 응답 데이터가 NULL이 아니지만 서버에서 NULL 값을 가져옵니다. - iOS

내가 서버에 NULL 데이터가 생성 된 경우에도 얻고 이유를 잘 모르겠습니다

코드는

if(netStatus==ReachableViaWiFi || netStatus==ReachableViaWWAN){ 
    NSURL *url = [NSURL URLWithString:formattedURL]; 
    NSURLRequest* request = [NSURLRequest requestWithURL: url cachePolicy: NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0]; 
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *jsonData, NSError *error) 
    { 
     if (error){ 

     } 
     else{ 
      if ([NSString stringWithUTF8String:[jsonData bytes]]==NULL){ 
NSLog("The result is NULL");  
} 

I 이하 (서버 로그를 관찰함으로써, 내가 말할 수 있습니다) 오전 점점 때로는 결과가 NULL입니다. 나는 패턴을 찾을 수 없다. 그러나 이것은 10 번 중 2 번 발생합니다. 문제가 서버인지 앱인지에 따라 현지화 할 수 없습니다. 친절하게 알려주세요. 시간 내 주셔서 감사합니다

+0

null 응답을받는 경우 해당 URL에 공백이 있는지 확인하십시오. –

+1

문자열을 생성하려면'initWithData : encoding :'을 사용해야합니다. JSON이 다시 전송되는 이유는 무엇입니까 (매번 같음)? – Wain

+0

요청이 즉시 반복적으로 전송되는 경우에도 동일합니다. 요청이 5 분 간격으로 전송 된 경우 결과 Json이 달라집니다. –

답변

1

문자열을 만드는 데 initWithData:encoding:을 사용하는 경우 로깅에 문제가있는 것입니다. 실제로 텍스트를 디코딩하려고 시도하는 대신 데이터 길이를 확인할 수 있습니다. NSJSONSerialization을 직접 데이터와 함께 사용하고 적절한 옵션을 제공하고 결과 개체 및 오류를 기록하는 것이 더 좋습니다.

+0

코드에서 사소한 문제가 발생합니다 ([NSString alloc] initWithData : jsonData encoding : NSUTF8StringEncoding] == NULL) {}. NULL 값이 리턴 되더라도 (로그에서 "[]"로 표시됨) 조건이 NULL 일 때 블록이 실행되지 않습니다. iOS의 [] 값은 얼마입니까? NULL이 아니면 NULL이 아닌 다른 것으로 동일하게 처리해야합니다. 저에게 알려주세요. –

+0

빈 배열처럼 보일 것입니다. JSON을 디코딩하고 반환 된 객체 (배열 또는 사전)의 'count'를 사용해야합니다. – Wain