2010-02-05 4 views
0

File 's Owner 역할을하는 컨트롤러가 아닌 다른 컨트롤러로 버튼 터치로 액션을 보내려고합니다. 4 개의 개별 컨트롤러 (buttonController, toolbarController, textController 및 graphicController)와 다섯 번째 컨트롤러 (mainController)가 다른 네 개의 컨트롤러를 제어하는 ​​방식으로 화면의 네 가지 영역을 가지고 있습니다. mainController는 또한 File 's Owner와 관련된 것입니다. mainController에 의해 처리되는 버튼 누름을 얻으려면 쉽게 :File 's Owner가 아닌 다른 대상에 작업을 보내는 방법은 무엇입니까?

MainController.h 파일 :

- (IBAction)buttonIsTouched:(id)sender; 

MainController.m 파일 : 인터페이스 빌더에서 다음

- (IBAction)buttonIsTouched:(id)sender { 
    ..handle button touch event etc. 
} 

, 아래 버튼 터치를 연결 이벤트를 파일 소유자와 함께 선택하고 buttonIsTouched을 선택하면됩니다. 모두 잘 작동합니다. 그러나 File 's Owner 컨트롤러가 아닌 컨트롤러에서 똑같은 작업을 수행하면 응용 프로그램이 충돌합니다. 다음은 내가 한 일입니다.

4 개의 컨트롤러를 mainController의 인스턴스 변수로 만듭니다. -[MainController viewDidLoad]에서 인스턴스를 생성하십시오. 위와 똑같이 버튼 처리 방법을 제공하십시오. Interface Builder에서 Object template를 Library (4 회)에서 mainController.xib 브라우저로 드래그하십시오. 이 개체의 유형을 ButtonController, ToolBarController, TextControllerGraphicsController으로 각각 설정하십시오. 터치 다운 버튼 이벤트를 ButtonController 객체와 연결하고 작은 팝업 상자에 항목을 선택하십시오. 버튼을 클릭하십시오. 오류 코드를 적어 두지 않았지만 INVALID_ACCESS와 비슷했습니다

물론 모든 입력을 먼저 mainController로 이동 한 다음 각 개별 컨트롤러에 위임 할 수 있습니다.하지만 이것은 하위 컨트롤러가 업스트림 쪽 메시지를 받기 전에 일부 작업을 수행해야하기 때문에 비효율적 인 해결책으로 보입니다 mainController에. mainController를 거쳐야하고, 그런 경우에 나는 친절합니다.

누구나이 작업을 수행하는 방법을 알고 있고 내가하고 싶은 것과 비슷한 작업을 수행하는 샘플 코드가 있으면 감사하게 생각합니다. 당신의 접근 방식의

교류

답변

1

하나의 문제는 당신의 4 개의 하위 컨트롤러 ButtonController, ToolBarController, TextControllerGraphicsController의 각각에 대한 인스턴스화 두 개체. viewDidLoad에 프로그래밍 방식으로 컨트롤러를 만들지 만로드 된 펜촉에서 이미 인스턴스화되었습니다.

viewDidLoad에 컨트롤러를 생성하지 말고 대신 MainController에 고정 IBOutlet 속성을 사용하여 IB에서 연결합니다.

컨트롤러 객체는 MainController에 의해 소유되며 nib 로딩 후에 제거되지 않습니다. 그러면 메모리 오류도 제거됩니다.

관련 문제