2014-10-12 3 views
0

나는이 질문 자습서 다음되었습니다왜 내 대리자 메서드가 호출되지 않습니까?

을하지만 난 여전히 뭔가를 놓친 거지. 내 위임 방법

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

는 항상라는 약간의 시간이 걸리고 나는 때문에 인터넷 속도의의를 생각하지만, 방법

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data 

결코 불려갑니다됩니다. 내가 뭘 놓치고 있니? 도와주세요.

내 코드 :

-(void)loadDataBase{ 
    NSString *post = [NSString stringWithFormat:@"advnr=123"]; 
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://thewebsite.abc/interface.php"]]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:postData]; 
    NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self]; 
    //return @""; 
} 

#pragma mark - 
#pragma mark NSURLConnection delegates 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data { 
    NSLog(@"Success"); // never gets executed 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSLog(@"didFinished"); 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    NSLog(@"FAILED"); 
} 
+0

이 대리자 메서드 경우에만 웹 서비스 반환 데이터, you'r 요청 데이터를 반환 기타를 게시 있다고 확신 할 때 호출 200 HTTP 헤더보다? –

+0

네, HTML 테스트 폼으로 테스트 할 때 항상 필요한 데이터를 얻습니다. –

답변

0

내가 진정으로 데이터가 반환되고 있다는 것을 의심 (하나 때문에 일부 웹 서비스에 오류가 있거나 잘못 작성 요청).

원할 경우 Charles을 사용하여 요청 및 응답을 확인할 수 있습니다. BTW, Charles 또는 이와 유사한 도구는 네트워크 문제를 클라이언트 측 프로그래밍 문제와 분리하여 HTTP 문제를 간단하게 진단 할 수 있기 때문에 병기에 추가 할 수있는 유용한 무기입니다.

이러한 종류의 오류가 발생하는 경우에도 서버에서 반환하지 않는 경우가 종종 발생합니다 (예 : 200 statusCode). list of HTTP status codes을 참조하십시오.

또한 didReceiveResponse를 구현하여이를 확인하고 응답의 헤더를 검사 할 수 있습니다 :

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse*)response { 
    if ([response isKindOfClass:[NSHTTPURLResponse class]]) { 
     int statusCode = [(NSHTTPURLResponse *)response statusCode]; 
     if (statusCode != 200) { 
      NSLog(@"Status code = %ld; response = %@", (long)statusCode, response); 

      // handle this error however you'd like 
     } 
    } 

    // temporarily, you might even want to log the whole `response` regardless of the status code 
    NSLog(@"%s: %@", __PRETTY_FUNCTION__, response); 
} 
+0

'{상태 코드 : 200, 헤더 { 연결 = 닫기; "Content-Length"= 0; "Content-Type"= "text/html"; 날짜 = "일요일, 2014 년 10 월 12 일 19:21:08 GMT"; 서버 = "Apache/2.2.22"; "X-Powered-By"= "PHP/5.3.26"; }}'그러나 나는 이유를 이해할 수 없다. html 테스트 폼을 사용하면 항상 내 데이터를 얻는다. .. –

+0

그건 고무적이다. 우리는'200'을보고 싶다. 따라서 다음 질문은 서버가 실제로 아무것도 리턴하지 않았는지 여부입니다. 이것은 Charles가 값을 헤아릴 수없는 곳입니다. – Rob

+0

콘텐츠 길이가 0 ... 즉 데이터가 없음을 의미합니다. –

관련 문제