dem*_*319 2 xcode cocoa delegates objective-c
的main.m
#import <Cocoa/Cocoa.h>
int main(int argc, char *argv[])
{
return NSApplicationMain(argc, (const char **) argv);
}
Run Code Online (Sandbox Code Playgroud)
CoolClass.h
#import <Cocoa/Cocoa.h>
@interface CoolClass : NSObject <NSApplicationDelegate> {
}
- (void) applicationDidFinishLaunching : (NSNotification *) aNotification;
@end
Run Code Online (Sandbox Code Playgroud)
CoolClass.m
#import "CoolClass.h"
@implementation CoolClass
- (void) applicationDidFinishLaunching : (NSNotification *) aNotification {
NSLog(@"THIS SHOULD BE PRINTED TO THE DEBUG CONSOLE");
}
@end
Run Code Online (Sandbox Code Playgroud)
我也试过"applicationWillFinishLaunching",但仍然没有运气.任何帮助都将不胜感激.谢谢.
您应该CoolClass在Interface Builder中定义您的应用程序委托(Ctrl +从App实例拖动到您的CoolClass实例
您所缺少的是采用该协议使得CoolClass类型的对象可以作为任何NSApplication对象的委托使用(前提是您遵循声明并实现协议的所有必需方法).当您将类的实例设置为应用程序的委托时,声明对协议的一致性还会阻止编译器警告.
但是对于特定的应用程序对象(比如,Cocoa为您创建的共享NSApplication对象)知道将消息从协议发送到特定的CoolClass对象,您必须将要接收这些消息的对象设置为特定的应用程序对象的委托.
这意味着,在您希望接收的消息将被应用程序发送之前的某个时间,某些东西需要实例化CoolClass对象 - 调用它c- 并告诉应用程序,"嘿,您的委托已经c在这里,所以发送委托消息从现在开始对小费者来说."
归结为这些代码行必须在应用程序完成启动之前执行:
CoolClass *c = [[CoolClass alloc] init];
[[NSApplication sharedApplication] setDelegate:c];
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最简单方法是让Interface Builder为您完成工作:让MainMenu nib实例化您的CoolClass,并在加载nib时将cool类对象设置为应用程序的委托,正如其他人所建议的那样.
为此,请打开MainMenu.xib.将自定义对象拖到xib中,并在检查器中将其类更改为CoolClass.按住Ctrl键(或右键单击拖动)从xib中的应用程序对象到CoolClass对象,然后选择"委托".保存,构建和运行.
| 归档时间: |
|
| 查看次数: |
1250 次 |
| 最近记录: |