应用代表 - 可可

时间:2009-09-03 18:44:49

标签: objective-c cocoa xcode delegates

我想将applicationDidFinishLaunching:合并到我的cocoa委托中。我该怎么办?在iphone SDK上,applicationDidFinishLaunching已经在应用程序委托中,但在制作我的mac应用程序时,我注意到没有。

最诚挚的问候,

凯文

3 个答案:

答案 0 :(得分:20)

从Xcode 3.2开始,Mac应用程序模板还附带了一个已经连接的应用程序委托,它具有这样的方法。

要在Xcode 3.2之前创建的项目中进行设置,请为您的委托创建一个新类作为其实例。我通常将我的名字命名为“AppDelegate”。您可以通过右键单击Classes组并选择“Add File”,然后选择Cocoa NSObject子类文件模板来完成此操作。

打开刚刚创建的标题(AppDelegate.h)。给它你想要的任何实例变量。然后点击Go to Counterpart。这会将您带到实现文件(AppDelegate.m)。在此处添加applicationDidFinishLaunching:实例方法。与iPhone不同,这是一个通知处理程序方法,因此需要NSNotification实例而不是NSApplication实例。

现在把它连接起来。在Resources组中,打开MainMenu.nib。将“对象”从“库”窗口拖到顶级nib窗口(其中包含图标的窗口,例如“文件”的“所有者”和“第一响应者”)。选择刚刚创建的对象,然后打开“标识”检查器。将对象的类设置为AppDelegate,与您在Xcode中使用的名称相匹配。右键单击文件所有者,然后从其delegate出口拖动到新对象。

在Xcode中,向您的applicationDidFinishLaunching:方法添加NSLog语句。点击Save All,然后点击Build and Go。切换回Xcode并打开调试器控制台。如果你做的一切都没有,我没有忘记任何事情,你应该看到那里的日志信息。

答案 1 :(得分:6)

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

您也可以在Interface Builder中执行此操作;从MainMenu.xib中的“文件所有者”,只需将“委托”插座拖到您的对象上即可。您可能需要考虑使用-awakeFromNib代替。

答案 2 :(得分:0)

您是否完全错过了应用程序委托文件?似乎Xcode安装脚本中存在一个错误(至少对于Snow Leopard上的3.2.1),它将最新的项目模板安装在错误的文件夹中。 “Cocoa Application”项目的旧模板不包含委托文件。

我在一篇名为Fixing the Xcode Project Templates的博文中解释了我发现的内容(以及我如何“修复它”。

干杯, 格雷厄姆