gpt4 book ai didi

cocoa - 启动 systemStatusBar 在 applicationDidFinishLaunching 中不起作用

转载 作者:行者123 更新时间:2023-12-03 17:15:20 27 4
gpt4 key购买 nike

我的项目是基于文档的,只有将加载状态菜单的代码放在awakeFromNib下才会执行。

#import "StatusMenuAppDelegate.h"

@implementation StatusMenuAppDelegate

@synthesize window = _window;

-(void)awakeFromNib {
myStatusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain];
statusImage = [NSImage imageNamed:@"statusNorm.png"];
[myStatusItem setImage:statusImage];
[myStatusItem setHighlightMode:YES];
[myStatusItem setMenu:myStatusMenu];
}
@end

但是,在我的测试项目(非基于文档)中,代码在 applicationDidFinishLaunching 中执行得很好。为什么?难道我不想在状态菜单中使用此功能吗?

最佳答案

applicationDidFinishLaunching: 消息由应用程序对象发送至其委托(delegate)。它不会发送到任何其他对象。

您当然可以在文档对象中响应该消息,但他们永远不会收到它,因为没有任何东西发送给他们。这就是为什么您在文档对象或非应用程序委托(delegate)的任何其他对象中的该方法中执行的任何操作都不会发生。

awakeFromNib 是您可以创建状态项的地方。我可能会在 windowControllerDidLoadNib: 中执行此操作。

这是假设您确实希望每个文档都有一个状态项,这可能没有意义。如果这不是您想要的,您应该将状态项的创建、所有权和管理移至单例对象,该对象应该由应用程序的委托(delegate)创建(可能在 applicationDidFinishLaunching: 内),并且具有任何所有文档都根据需要与该对象进行交互。

关于cocoa - 启动 systemStatusBar 在 applicationDidFinishLaunching 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8527737/

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