2009-09-03 47 views
5

我想將applicationDidFinishLaunching:併入我的可可委託中。我將如何做到這一點?在iphone SDK上,applicationDidFinishLaunching已經在應用程序委託中,但是在製作我的Mac應用程序時,我注意到沒有。應用程序委託 - 可可

最好的問候,

凱文

回答

6
- (id)init 
{ 
    if (self = super init]) { 
     [NSApp setDelegate:self]; 
    } 
    return self; 
} 

你也可以這樣做在Interface Builder;從MainMenu.xib中的「文件所有者」中,只需將「委託」插座拖到您的對象。不過你可以考慮使用-awakeFromNib

+2

你缺少周圍'超init'角括號,你不提,'方法的applicationDidFinishLaunching:'必須由ssame類實現,使其工作。 – MKroehnert 2010-09-02 09:12:41

20

從Xcode 3.2開始,Mac應用程序模板還帶有一個已經連接的應用程序委託,它具有這種方法。

要在Xcode 3.2之前創建的項目中進行設置,請爲您的代理創建一個新類作爲實例。我通常將我的名字命名爲「AppDelegate」。您可以通過右鍵單擊Classes組並選擇「Add File」,然後選擇Cocoa NSObject子類文件模板來完成此操作。

打開剛創建的頭文件(AppDelegate.h)。給它任何你想要的實例變量。然後打到轉到對應部分。這將把你帶到實現文件(AppDelegate.m)。在此處添加您的applicationDidFinishLaunching:實例方法。與iPhone不同,這是一個通知處理程序方法,因此它需要一個NSNotification實例,而不是一個NSApplication實例。

現在掛鉤它。在資源組中,打開MainMenu.nib。將一個對象從庫窗口拖到頂層的筆尖窗口(其中包含圖標的窗口,例如文件所有者和第一響應者)。選擇剛剛創建的對象並打開「標識」檢查器。將對象的類設置爲AppDelegate,並匹配您在Xcode中使用的名稱。用鼠標右鍵單擊文件的所有者,然後將其從delegate插座拖到新對象。

在Xcode中,向您的applicationDidFinishLaunching:方法添加NSLog語句。點擊Save All,然後Build and Go。切換回Xcode並打開Debugger Console。如果你做的都對,而且我什麼也沒有忘記,那麼你應該在那裏看到日誌消息。

+0

'Mac應用程序模板還帶有一個已經連接的應用程序委託,它具有這種方法.'不適用於基於文檔的應用程序... – zakdances 2013-10-16 00:06:15

+0

@yourfriendzak:好點。如果您想將應用程序委託添加到基於文檔的應用程序(出於某種原因),則需要遵循其餘的說明。 – 2013-10-16 02:07:32

0

你是否錯過了應用程序委託文件?似乎Xcode安裝腳本中存在一個錯誤(至少在Snow Leopard中爲3.2.1),它將最新的項目模板安裝在錯誤的文件夾中。 「Cocoa Application」項目的舊模板不包含委託文件。

我已經在一篇名爲Fixing the Xcode Project Templates的博客文章中解釋了我發現的東西(以及我如何「修復」它)。

乾杯, 格雷厄姆

相關問題