문제

Apple의 문서의 코드를 사용하여 HTTP 커뮤니케이션을 수행합니다. URL에 성공적으로 연결할 수 있지만 서버에서 데이터를 수신하지 못했습니다.

// create the request
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://..."]
                        cachePolicy:NSURLRequestUseProtocolCachePolicy
                        timeoutInterval:60.0];
// create the connection with the request
// and start loading the data
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
    // Create the NSMutableData that will hold
    // the received data
    // receivedData is declared as a method instance elsewhere
    NSMutableData *receivedData=[[NSMutableData data] retain];
} else {
    // inform the user that the download could not be made
}

이유는 다음과 같습니다.

  1. 나는 선언한다 receivedData 행동 자체에서. 주석은 다른 곳에서 그것을 선언해야한다고 말합니다. 어디에서 선언해야합니까? 컨트롤러의 속성으로 선언해야합니까?

  2. 어떻게 [[NSMutableData data] retain] URL 외부에있는 URL을 찾으십시오 if{}?

도움이 되었습니까?

해결책

NSURLConnection의 InitWithRequest : Delegate : Method, 데이터 (다른 항목과 함께)를 사용하면 메소드 호출 시퀀스로 대의원 객체로 전송됩니다. 메소드는 모두 선택 사항이므로 대의원 객체가 구현되지 않으면 연결 객체가 건너 뜁니다.

많은 방법이 있으므로 여기에 모두 나열하지는 않지만 모두 NSURLConnection 문서에 자세히 설명되어 있습니다. 수신 된 데이터를 얻으려면 -Connection : didreceivedata : 델리 게이트 객체에서 구현하려고합니다. 이 방법은 잠재적으로 두 번 이상 호출되며 NSDATA 객체는 새로 수신 된 데이터를 나타냅니다. 그런 다음 기존 NSMutabledata 객체에 추가하거나 다른 의미를 지정할 수 있습니다. -ConnectionDidFinishLoading : Delegate Object에서 호출 될 때 모든 데이터를 받았다는 것을 알게 될 것입니다.

두 가지 구체적인 질문에 답하기 위해 :

  1. 예, 컨트롤러 개체의 속성으로 선언해야합니다. 또한 NSURLConnection의 InitWithRequest : Delegate :, 연결 객체가 생성 되 자마자 데이터를 비동기로로드하기 시작하기 때문에 객체를 할당해야합니다. 대안으로 -Connection : DidReceiveresponse : 대의원에서 HTTP 상태를 확인한 다음 데이터 객체를 작성하여 구현할 수 있습니다.

  2. Mutable Data Object는 URL, 연결 또는 데이터를 설정할 때 찾을 수 없지만 설명 된 단계를 따르면 데이터를 추가하여 사용 할 수 있습니다. 연결이 완료되면.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top