2012-01-26 4 views
0

공개적으로 허점이있을 위험이 있으므로 앱 컨트롤러와 창 컨트롤러 간의 통신에 대한 이해를 누군가가 이해할 수 있기를 바랍니다. 다음은 xcode4를 사용하는 시나리오입니다.앱 컨트롤러와 창 컨트롤러 간의 참조

기본 AppDelegate.h 및 .m을 "컨트롤러"(MainMenu.xib의 대리인이기도 함)로 사용. int counter라고 불리는 ivar를 가져라.

작성된 page.xib 및 PageController.h 및 .m (서브 클래스 NSWindowController).

사용 된 IBAction을 사용하여 페이지 개체를 만들고 볼 수 있습니다. (PAGE1!의) { PageController * PAGE1 = [[페이지

if (!page1) { 
    page1 = [[PageControoer alloc] initWithWindowNibName:@"page"]; 
} 

[page1 showWindow:sender]; 

그래서 새 창 팝 우리는 버튼을 누를 수 등 새 창에 대한 코드는 PageController.h 모든 경우 : 이것처럼 및 .m. 그리고 기본적으로 작동합니다.

그건 문맥입니다, 여기 제가 혼란스러워하는 곳입니다.

a) 질문 : AppController에서 counter라는 AppDelegate.h의 원래 ivar에 액세스하려고한다고 가정 해 봅시다. 변수를 검색하거나 업데이트하십시오. 어떤 접근 방식을 취할 것인가?

b) 확인 : AppDelegate로 돌아가서 page1의 선택기에 액세스하려고한다고 가정 해 보겠습니다. 나는 이렇게 할 수 있다고 믿는다 : [page1 runaction]; 또는 [[page1 variable] setStringValue : @ "hello"]; (이것은 준수하지만 xib보기로 변경 사항을 얻을 수 없기 때문에 실제로 작동하는지 잘 모르겠습니다.)

ok 및 stumper. 다른 뷰 컨트롤러가 Page2Controller.h 및 .m을 호출하여 다른 뷰가 생성되었다고합시다. c) 페이지와 페이지 2 사이의 데이터 흐름은 AppDelegate를 통해 또는 직접 어떻게해야합니까? 그 (것)들을 함께 연결하기 위하여 구문은 어떻게 보일 는가 것입니다?

나는 튜토리얼을 따라 왔지만이 앞뒤 메시징을 실제로 다루지는 않는다. 모든 도움에 감사드립니다!

답변

0

a) 일반적으로 컨트롤러가 액세스하는 데이터를 갖기 위해서는 어떤 방식 으로든 액세스 권한이 부여 된 모델에 있어야합니다. 다음과 같은 방법을 사용하여 앱 대리인의 항목에 액세스 할 수 있습니다.

AppDelegate* appDelegate = [[NSApplication sharedApplication] delegate]; 
[appDelegate <some method>]; 

b) 내가 원하는 것을 이해하지 못합니다. 앱 대리자가 page1에 대한 포인터를 가지고 있다면 그렇습니다. 직접 호출 할 수 있습니다.

c) 다시 말하면, 어떤 종류의 데이터 모델이 있어야합니다. 사용자가보기를 변경하면 컨트롤러가 데이터 모델을 업데이트해야합니다. 예를 들어 알림, IBActions 및 직접 호출을 사용하여 업데이트를 수행 할 수 있습니다. Model, View, Controller 디자인 패턴을 찾아야합니다.

+0

도움 주셔서 감사합니다. 그건 의미가 있습니다. 나는 모델을 만들고 사용하고 여전히 코코아에 익숙해지는 튜토리얼을 작성하려고 노력 중이다. 이 질문은 좋은 GUI와 함께 몇 가지 명령 줄 기능을 래핑하고있는 응용 프로그램과 관련이 있습니다. 다시 - 많은 감사합니다. – CocoaEv

관련 문제