Programing

NSURLConnection 대리자 메서드가 호출되지 않습니다.

lottogame 2020. 12. 27. 10:15
반응형

NSURLConnection 대리자 메서드가 호출되지 않습니다.


GET 요청을 사용하여 서버와 통신하기 위해 간단한 NSURLConnection을 만들려고합니다. 연결은 잘 작동하지만 NSURLConnection의 위임 메서드는 호출되지 않습니다.

수행중인 작업은 다음과 같습니다.

NSString *post = [NSString stringWithFormat:@"key1=%@&key2=%@&key3=%f&key4=%@", val1, val4, val3, val4];

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease] ;

[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.domain.com/demo/name/file.php?%@", post]]];

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];

다음 대리자 메서드를 구현했지만 호출 된 메서드가 없습니다.

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    NSLog(@"did fail");
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    NSLog(@"did receive data");
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    NSLog(@"did receive response ");
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    NSLog(@"did finish loading");
    [connection release];
}

내가 뭔가를 놓치고 있습니까?


메인 스레드에서 작업을 실행 해보십시오.

NSURLConnection * connection = [[NSURLConnection alloc] 
                                initWithRequest:request
                                       delegate:self startImmediately:NO];

[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] 
                      forMode:NSDefaultRunLoopMode];
[connection start];

백그라운드 스레드에서 이것을 호출하고 있습니까? 백그라운드 스레드에서이 작업을 수행하는 경우 대리자가 호출되기 전에 스레드가 종료 될 수 있습니다.


수신 된 응답의 길이를 확인하여 0 바이트의 데이터를 가져 오지 않아야합니다.


요청이 메인 스레드에서 호출되었는지 확인하는 것 외에도 시스템에 실행 시간을 되돌려 놓았는지 확인할 수 있습니다 ( "main"을 종료하는 경우). 델리게이트가 호출 될 때까지 루프에 머무르는 테스트 코드가있었습니다. 시스템이 메인 스레드에서 델리게이트를 호출하기 위해 작업을 수행해야하기 때문에 절대 호출되지 않습니다.

참조 URL : https://stackoverflow.com/questions/5787170/nsurlconnection-delegate-methods-are-not-called

반응형