gpt4 book ai didi

objective-c - NSApplicaton 委托(delegate) - applicationDidFinishLaunching

转载 作者:行者123 更新时间:2023-12-03 16:51:05 24 4
gpt4 key购买 nike

我在这里为我的 cocoa 应用程序声明了一个委托(delegate):

MyAppDelegate.h

@interface MyAppDelegate : NSApplication {
}
- (void) applicationDidFinishLaunching:(NSNotification*) notice ;
@end

MyAppDelegate.m

@implementation MyAppDelegate 
- (void) applicationDidFinishLaunching:(NSNotification*) notice {
NSLog(@"inside appdidfinishlaunching") ;
}
@end

我已将文件所有者的委托(delegate)导出链接到 IB 中的该对象。

但是,这个方法没有被调用。我没有看到任何日志消息。

您能指出哪里出了问题吗?

最佳答案

您的应用程序委托(delegate)本身并不是应用程序。它应该继承自 NSObject,而不是 NSApplication。

为什么这很重要

NSApplication 是一个单例。它的 init 方法始终返回 NSApplication 或任何子类的第一个实例,并丢弃您(或 nib 加载程序)可能调用 init 的任何后续对象。

因此,您最终将应用程序对象设置为其自己的委托(delegate)。您打算创建委托(delegate)的对象在第二次调用 init 时消失,应用程序对象取代了它的位置。

将应用程序对象更改为子类的实例也可以,但是您仍然将应用程序作为其自己的委托(delegate),这是不干净的并且可能是危险的(NSApplication 可能会私下实现其委托(delegate)方法本身,因为它们只是通知处理程序方法)。唯一正确的解决方案是让您的应用程序委托(delegate)类不继承自 NSApplication。

关于objective-c - NSApplicaton 委托(delegate) - applicationDidFinishLaunching,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/741260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com