2010-02-05 15 views
0

我試圖從按鈕接觸發送到控制器以外的其他控制器作爲文件的所有者。我有四個不同的屏幕區域,我想用四個獨立的控制器(buttonController,toolbarController,textController和graphicController)與第五個控制器(mainController)控制其他四個控制器。 mainController也是與文件所有者關聯的人。爲了得到按下按鈕由mainController處理很簡單:如何將操作發送給文件所有者以外的目標?

MainController.h文件:

- (IBAction)buttonIsTouched:(id)sender; 

MainController.m文件:

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

然後在界面生成器,按鈕觸地降落關聯事件與文件的所有者,並選擇buttonIsTouched並離開你去。一切正常。 但是,當我對不是文件所有者控制器的控制器執行完全相同的操作時,應用程序會崩潰。這是我做的:

創建四個控制器作爲mainController的實例變量。 在-[MainController viewDidLoad]中實例化它們。 提供與上述完全相同的按鈕處理方法 在Interface Builder中,將Object模板從庫(四次)拖到mainController.xib瀏覽器上。 分別將這些對象的類型設置爲ButtonController,ToolBarController,TextControllerGraphicsController。 關聯與ButtonController對象觸摸向下按鈕事件,並選擇buttonIsTouched條目(在小彈出框) 生成並運行該應用程序 點擊按鈕 崩潰 - 對不起,我沒有記下錯誤代碼,但它類似於INVALID_ACCESS

當然,我可以將所有輸入先發送到mainController,然後委派給每個單獨的控制器,但這似乎是一個不雅的解決方案,特別是因爲我希望較低的控制器在消息傳遞上游之前做一些工作到mainController。必須經過mainController,然後返回類型,如果我不喜歡。

如果有人知道如何做到這一點,並有一些示例代碼做了類似於我想做的事情,我將不勝感激。

交流

回答

1

你的一個方法的問題是,您的實例化兩個對象爲每個四個子控制器ButtonControllerToolBarControllerTextControllerGraphicsController的。您正在以編程方式在viewDidLoad中創建控制器,但它們已從加載的筆尖實例化。

您不應在viewDidLoad中創建控制器,而應在MainController中保留IBOutlet屬性以在IB中連接它們。

然後,控制器對象歸MainController所有,並且在加載nib之後不會被刪除。這也將消除你的記憶錯誤。

相關問題