2013-03-21 2 views
2

서버에 연결하기 위해 -[NSURLConnection initWithRequest...]을 사용하고 서버 측에 오류가 발생하면 400이라는 메시지가 본체에 표시됩니다. 오류가없는 경우 didReceiveData에서 응답 데이터를 가져올 수 있습니다. 그러나 서버에서 오류 400을 반환하면 didReceiveData에 오류 메시지가 표시되지 않습니다.오류가 발생하면 NSURLConnection 다른 결과

그러나 동일한 요청을 수행하기 위해 -[NSURLConnection sendSynchronousRequest...]을 사용하는 경우 sendSynchronousRequest의 반환 값에서 오류 데이터를받습니다.

didReceiveData에서 오류 메시지를 가져오고 싶지만 그 이유는 알 수 없습니다. do, do some 누군가 나를 도울 수 있습니까? 나는 그것을 얻을 수 없다

NSURL *url = [NSURL URLWithString:@"http://devapi.xxx.com/v1/debug/error"]; 
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:url 
                   cachePolicy:NSURLRequestUseProtocolCachePolicy 
                  timeoutInterval:240] autorelease]; 

[request setHTTPMethod:@"POST"]; 


[request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

NSURLResponse *response = nil; 
NSError *error = nil; 
NSData *data = [NSURLConnection sendSynchronousRequest:request 
            returningResponse:&response 
               error:&error]; 


NSLog(@"STATUS:%d", [((NSHTTPURLResponse *)response) statusCode]); 
NSLog(@"ERROR:%@", error); 

이 방법 :

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://devapi.xxx.com/v1/debug/error"] 
                  cachePolicy:NSURLRequestUseProtocolCachePolicy 
                 timeoutInterval:240] autorelease]; 

[request setHTTPMethod:@"POST"]; 


[request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
urlConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    NSLog(@"statusCode:%d",((NSHTTPURLResponse *)response).statusCode); 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
} 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
[receivedData appendData:data]; 
NSLog(@"DATA:%@",[NSString stringWithCString:[receivedData bytes] encoding:NSASCIIStringEncoding]); 
} 
+0

성공적인 (400이 아닌) 응답은'didReceiveData'를 호출합니까? 'didFailWithError'는 이제까지 불렀습니까? –

+0

상태, 데이터 및 오류에 대한 로그 출력을 표시 할 수 있습니까? –

+0

그의 문제는 HTTP 코드가 200이 아닐 때, 그는 항상 서버에서 응답의 "내용"부분을 읽을 수 없다는 것입니다. 그것이 문제가되는 이유는 그것이 어떤 종류의 응용 프로그램 오류인지 기록하기 때문입니다. – Vincent

답변

1

나는 내가 찾은 생각 didReceiveData 그래도받을 수 있기 때문에, 내가 didReceiveResponse에 오류 상태 코드를 얻을 때 나는 즉시 데이터를 얻을 수 및 연결, 을 취소하려고, 입니다하지만 잘못 발생 didReceiveResponse 후에.

고맙습니다.

1

를 사용하여 이러한 오류를 처리하기위한이 대리자 메서드

이 방법 나는 오류 메시지를 얻을 수 있습니다.

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
     NSLog(@" Failed with error---%@",error); 
} 
관련 문제