2014-07-21 59 views
0

一個NSApplicationDelegate方法在ApplicationDelegate.h,我有:訪問跨越類

@interface appDelegate : NSObject <NSApplicationDelegate> 

- (IBAction)showPage:(id)sender; 

buttonController,(其被連接到按鈕的發送操作的XIB)我有另一個功能

- (IBAction) clickAction:(id)sender { 
    NSLog(@"Clicked"); 
} 

我想用類似按鈕觸發功能:

- (IBAction) clickAction:(id)sender { 
    [showPage:nil]; 
    NSLog(@"Clicked and the page is shown"); 
} 

跨類訪問showPage函數的正確方法是什麼?

回答

3

從當前應用程序獲取委託,然後調用它的方法。

[(appDelegate*)(NSApplication.sharedApplication.delegate) showPage:nil]; 
+3

不,這不是爲什麼委託存在。 'NSApplicationDelegate'存在對系統事件作出反應,不作爲單例使用。 – vikingosegundo

+0

@vikingosegundo - 夠公平的。我想我應該說的是,對於代表來說,這是一個非常常見的用例,不管它是否打算以這種方式使用。 – ahruss

1

不要硬連接動作,只需將動作發送給第一響應者。

這是一個佔位符對象,在運行時將解析爲誰是第一響應者(輸入字段,視圖等),然後通過chain-of-responsibility pattern搜索鏈,直到最終請求您的應用程序委託來響應消息。

精益關於OS X此事件處理基礎知識: Event Architecture