主目录

#import <Cocoa/Cocoa.h>

int main(int argc, char *argv[])
{
    return NSApplicationMain(argc,  (const char **) argv);
}


CoolClass.h

#import <Cocoa/Cocoa.h>

@interface CoolClass : NSObject <NSApplicationDelegate> {

}
- (void) applicationDidFinishLaunching : (NSNotification *) aNotification;
@end


酷类

#import "CoolClass.h"

@implementation CoolClass
- (void) applicationDidFinishLaunching : (NSNotification *) aNotification {
    NSLog(@"THIS SHOULD BE PRINTED TO THE DEBUG CONSOLE");
}

@end


我也尝试过“ applicationWillFinishLaunching”,但还是没有运气。任何帮助将不胜感激。谢谢。

最佳答案

您所缺少的是,采用该协议可使CoolClass类型的对象随时可以用作任何NSApplication对象的委托(前提是您遵循声明并实现协议的所有必需方法)。在将类的实例设置为应用程序的委托时,声明符合协议还可以防止编译器警告。

但是对于特定的应用程序对象(例如,Cocoa为您创建的共享NSApplication对象)知道将消息从协议发送到特定的CoolClass对象,您必须将要接收这些消息的对象设置为特定的应用程序对象的委托。

这意味着在应用程序发送您想要接收的消息之前的某些时间,需要实例化一个CoolClass对象-称为c-并告诉应用程序,“嘿,您的委托在c在这里,所以从现在开始向小伐木工人发送代表信息。”

归结为,这些代码行必须在应用程序完成启动之前执行:

CoolClass *c = [[CoolClass alloc] init];
[[NSApplication sharedApplication] setDelegate:c];


发生这种情况的最简单方法是让Interface Builder为您完成工作:让MainMenu nib实例化您的CoolClass,并在加载nib时将cool类对象设置为应用程序的委托,如其他人所建议的那样。

为此,请打开MainMenu.xib。将自定义对象拖到xib中,然后在检查器中将其类更改为CoolClass。 Ctrl-拖动(或右键单击拖动)从Xib中的应用程序对象到CoolClass对象,然后选择“代理”。保存,构建和运行。

10-08 02:37