gpt4 book ai didi

objective-c - cocoa 。如何仅在托盘应用程序中显示窗口

转载 作者:行者123 更新时间:2023-12-03 17:04:21 26 4
gpt4 key购买 nike

我已经为 Mac OS X 创建了一个仅状态栏的应用程序。类似的东西 http://d.pr/i/Covi 。我通过本教程创建了它http://cocoatutorial.grapewave.com/2010/01/creating-a-status-bar-application/ 。现在我有一个问题:如何通过单击“关于”菜单项来显示窗口?我尝试这样做:

#import "IGAppDelegate.h"
#import "IGAboutWindowController.h"

@implementation IGAppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
}

- (void)awakeFromNib {
_statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
[_statusItem setMenu:_menu];
[_statusItem setTitle:@"LeoHelper"];
[_statusItem setHighlightMode:YES];
}

#pragma mark - Actions



- (IBAction)quit:(id)sender {
[NSApp terminate:self];
}

- (IBAction)about:(id)sender {
IGAboutWindowController *aboutController = [[IGAboutWindowController alloc] init];
[aboutController showWindow:self];
}
@end

最佳答案

我猜测您正在使用自动引用计数(ARC)。如果是,那么 about: 方法中将会发生以下情况:

您首先创建一个 IGAboutWindowController 的本地实例,然后告诉它显示其窗口。这将在屏幕上显示该窗口,但是,如果您的项目使用 ARC,该窗口将立即消失。原因是,一旦 about: 方法结束,IGAboutWindowController 的本地实例将自动释放,因此,其窗口将被删除从屏幕上。

要在 ARC 管理的项目中成功实现此 about: 方法,您应该将 aboutController 定义为 IGAppDelegate 的实例变量像这样的类:

@class IGAboutWindowController;

@interface IGAppDelegate : NSObject <...>

@property (nonatomic, strong) IGAboutWindowController *aboutController;

@end

然后实现您的 about: 方法,如下所示:

- (IBAction)about:(id)sender {
if (self.aboutController == nil)
self.aboutController = [[IGAboutWindowController alloc] init];
[aboutController showWindow:self];
}

关于objective-c - cocoa 。如何仅在托盘应用程序中显示窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14389291/

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