2009-09-03 109 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的博客文章中解释了我发现的东西(以及我如何“修复”它)。

干杯, 格雷厄姆

相关问题