gpt4 book ai didi

objective-c - 为什么我的 NSApplicationDelegate 类中的 applicationWillFinishLaunching 从未被调用?

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

main.m

#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

CoolClass.m

#import "CoolClass.h"

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

@end

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

最佳答案

您缺少的是,采用该协议(protocol)使得 CoolClass 类型的对象准备好充当任何 NSApplication 对象的委托(delegate)(前提是您遵循声明并实现协议(protocol)的所有必需方法)。当您将类的实例设置为应用程序的委托(delegate)时,声明与协议(protocol)的一致性还可以防止编译器发出警告。

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

这意味着,在应用程序发送您想要接收的消息之前,需要实例化一个 CoolClass 对象 - 将其称为 c - 并告诉应用程序,“嘿,你的委托(delegate)人是这里的c,所以从现在开始就向这个小家伙发送委托(delegate)消息。”

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

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

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

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

关于objective-c - 为什么我的 NSApplicationDelegate 类中的 applicationWillFinishLaunching 从未被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2243100/

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