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

标签 objective-c macos cocoa statusbar

我已经为 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/

相关文章:

ios - 当我选择一个 UITableViewCell 时,我的 View Controller 标签是一个 Action

objective-c - Podspec - 链接本地框架

macos - Mac 应用程序的标准输出在哪里?

macos - 以编程方式放回垃圾箱中的项目

objective-c - NSImage 绘制矩形 :fromRect:operation:fraction results in a flipped image

cocoa - 当我将其框架设置为其现有边界时,为什么我的 View 会移动?

iPhone 开发 : How to Catch Exception/NSError in Objective-C?

objective-c - 使用 UIModalPresentationFormSheet 的 View 模糊

c++ - 从 C++ 代码调用 Objective C 函数

c++ - OSX 上的空 wxWidgets 菜单