두 개의 클래스, "AppController"라는 컨트롤러와 Apple's URL Loading System Programming Guide의 샘플 NSURL 코드를 캡슐화하는 "URLDelegate"라는 클래스가 있습니다.Objective-C 및 NSURL : receivedData를 어디에 선언해야합니까?
가이드는 반복적으로 receivedData 인스턴스 변수를 "다른 위치"로 선언합니다. URLDelagate 클래스에서 선언하면 내 컨트롤러 클래스에서 다운로드 된 데이터를 "볼"수 없기 때문에 URLDelagate 클래스 외부에있는 것으로 가정합니다.
내가 데이터 때문에 내 connectionDidFinishLoading 기능에, 수신 된 것을 알고, 나는 NSLog의 결과 표시가 있습니다
NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]);
receivedText=[[NSString alloc] initWithData:receivedData encoding: NSASCIIStringEncoding];
NSLog(@"receivedText=%@",receivedText);
을 그래서있어 다음 질문으로 난처한 상황에 빠진 조금 :
- receivedData를 선언해야합니까? 내 컨트롤러 클래스? 세 번째 수업인가요?
- 일반 NSMutableData 변수처럼 그냥 선언 할 수 있습니까?
- URLDelegate 클래스에이 변수에 "액세스"권한을 부여하려면 어떻게해야합니까? 예 : 예를 들어, 내 AppController 클래스에서 receivedData를 선언하면 URLControl을 URLDelegate 내에서 인스턴스화하지 않아도됩니까? 하지만 AppController 클래스가 처음 URLDelegate 클래스를 인스턴스화하는 경우 어떻게 가능합니까?
특히 마지막 질문과 관련하여, 나는 분명하고 근본적인 무언가를 간과해야합니다. 누군가가 올바른 방향으로 나를 가리킬 수 있다면, 나는 정말로 감사 할 것입니다.
감사합니다.
업데이트 : 모든 NSURL 함수를 URLDelegate 클래스 밖으로 이동하여 컨트롤러 클래스에 배치했습니다. 이제 controllerDidFinishLoading에서 컨트롤러 클래스의 변수를 업데이트 할 수 있습니다. 이것은 나에게 조금은 해커처럼 보이지만 작동합니다.
대단히 감사합니다. 그것은 많은 혼란을 해결합니다. 제대로 이해하고 있다면 컨트롤러가 데이터를 확인하도록 경고하는 방법과 컨트롤러가 컨트롤러에 액세스 할 때까지 데이터를 유지하는 방법의 두 가지를 알아야합니다. – jthomas
또는 데이터를 컨트롤러에 직접 전달하는 것이 가장 좋습니다. 실제로 URLDelegate 클래스조차 갖지 않는 것이 가장 좋습니다. 앱 컨트롤러를 연결의 대리자로 만드는 것이 더 좋습니다. –