我在这里为我的cocoa应用程序声明了一个委托:
MyAppDelegate.h
@interface MyAppDelegate : NSApplication { } - (void) applicationDidFinishLaunching:(NSNotification*) notice ; @end
MyAppDelegate.m
@implementation MyAppDelegate - (void) applicationDidFinishLaunching:(NSNotification*) notice { NSLog(@"inside appdidfinishlaunching") ; } @end
我已将文件所有者的委托出口链接到IB中的此对象.
然而,这种方法并未被调用.我没有看到任何日志消息.
你能告诉我有什么问题吗?
您的应用程序委托本身不是应用程序.它应该继承自NSObject,而不是NSApplication.
NSApplication是一个单例.它的init
方法总是返回NSApplication的第一个实例或任何子类,抛弃你(或者nib加载器)可能正在调用的任何后续对象init
.
因此,您最终将应用程序对象设置为自己的委托.您打算使该委托的对象在第二次调用中死亡init
,并且应用程序对象取代了它.
将应用程序对象更改为子类的实例也可以工作,但是您仍然将应用程序作为自己的委托,这是不洁净且可能很危险的(NSApplication可能会私有地实现它的一些委托方法,因为它们'重新通知处理程序方法).唯一正确的解决方案是让您的应用委托类不从NSApplication继承.