主目录
#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对象,然后选择“代理”。保存,构建和运行。