我想将applicationDidFinishLaunching:方法加入到我的Cocoa代理中,应该怎么做?在iPhone SDK中,applicationDidFinishLaunching已经存在于应用程序代理中,但是我制作Mac应用程序时发现没有这个方法。
最好的问候,
Kevin
我想将applicationDidFinishLaunching:方法加入到我的Cocoa代理中,应该怎么做?在iPhone SDK中,applicationDidFinishLaunching已经存在于应用程序代理中,但是我制作Mac应用程序时发现没有这个方法。
最好的问候,
Kevin
从Xcode 3.2开始,Mac应用程序模板也带有一个应用程序委托,已经连接好了一个具有此方法的实例。
如果是在Xcode 3.2之前创建的项目中设置,请为您要实现的委托创建一个新类。我通常称其为“AppDelegate”。您可以右键单击Classes文件夹并选择“添加文件”,然后选择Cocoa NSObject Subclass文件模板来实现它。
打开您刚创建的头文件(AppDelegate.h)。添加任何您想要的实例变量,然后点击转到副本。这将带您进入实现文件(AppDelegate.m)。在这里添加您的applicationDidFinishLaunching:实例方法。不像iPhone上那样是一个通知处理方法,因此需要传入NSNotification实例而不是NSApplication实例。
现在连接它。在资源组中,打开MainMenu.nib。从库窗口中将对象拖动到顶级nib窗口中(即带有图标的窗口,例如File's Owner和First Responder)。选择您刚创建的对象并打开Identity inspector。将对象的类设置为AppDelegate,与您在Xcode中使用的名称匹配。右键单击File's Owner并从其代理输出中将其拖到您的新对象中。
在Xcode中,将日志语句添加到您的applicationDidFinishLaunching:方法中。保存全部,然后构建并运行。切换回Xcode并打开调试器控制台。如果您没有漏掉任何步骤,您应该在那里看到日志消息。
- (id)init
{
if (self = super init]) {
[NSApp setDelegate:self];
}
return self;
}
-awakeFromNib
。super init
周围的一个尖括号,并且你没有提到方法 applicationDidFinishLaunching:
必须由同一类实现才能使其正常工作。 - MKroehnert你是否完全缺少应用程序委托文件?似乎 Xcode 安装脚本中存在一个错误(至少在 Snow Leopard 上的 3.2.1 版本),会将最新的项目模板安装到错误的文件夹中。旧的“Cocoa 应用程序”项目模板不包含委托文件。
我已经在博客文章修复 Xcode 项目模板中解释了我发现的问题以及如何“修复”它。
祝好, Graham