Objective c mac状态栏应用程序不工作

Objective c mac状态栏应用程序不工作,objective-c,macos,cocoa,Objective C,Macos,Cocoa,我遵循这个:简单的教程,让一个基于状态栏的Mac应用程序工作,我也引用了苹果的NSStatusItem类引用-但我不知道我做错了什么 它只是不起作用。我的项目使用ARC 以下是FPAppDelete.h: #import <Cocoa/Cocoa.h> @interface FPAppDelegate : NSObject <NSApplicationDelegate> @property (weak) IBOutlet NSMenu *statusMenu; @pr

我遵循这个:简单的教程,让一个基于状态栏的Mac应用程序工作,我也引用了苹果的NSStatusItem类引用-但我不知道我做错了什么

它只是不起作用。我的项目使用ARC

以下是FPAppDelete.h:

#import <Cocoa/Cocoa.h>

@interface FPAppDelegate : NSObject <NSApplicationDelegate>

@property (weak) IBOutlet NSMenu *statusMenu;
@property (strong, nonatomic) NSStatusItem *statusBar;

@end

我一点也不希望出现这种情况,但当我运行应用程序时,我得到了这种情况,状态栏中没有任何内容状态栏是整个屏幕的右上部分。它是日期和时间、聚光灯等在菜单栏中显示的位置


您发布的屏幕截图位于主
NSWindow

的标题栏上,看起来您很乐意倾听。因此,我将快速向您展示如何运行状态应用程序

(1) 将NSMenu添加到侧栏(或任何您调用的内容)。(见下面的屏幕截图。)保留或删除3个通用菜单项由您决定

(2) 在AppDelegate.h下添加以下实例变量

@interface AppDelegate : NSObject <NSApplicationDelegate> {
    IBOutlet NSMenu *statusMenu;
    NSStatusItem *statusItem;
    NSImage *statusImage;
}

@property (assign) IBOutlet NSWindow *window;
@property (strong) NSMenuItem *menuItem1; // show application
(3) 返回Interface Builder并将状态菜单连接到已添加的NSMenu控件

setMainStatus方法(或任何您想要命名的方法)以编程方式将菜单项添加到状态菜单。首先,您需要创建NSStatusbar,它接受NSImage。此NSImage用于在状态菜单上显示图标。接下来,将菜单项和分隔符添加到状态菜单(在我的例子中是状态菜单)。我将menuItem1作为属性,以便应用程序可以启用/禁用它。这只是一个简单的例子。您可以将NSView添加到状态菜单。如果您想添加一个分隔符,它可以如下所示

 [statusMenu addItem:[NSMenuItem separatorItem]];

运行状态菜单应用程序不需要应用程序窗口。但是,如果要将状态应用程序提交到苹果的Mac App Store,您必须第一次显示主应用程序窗口。

在声称状态栏不工作之前,您首先应该知道状态栏是什么。我甚至不知道你为什么要把代码放在AppDelegate文件的awakFromNib方法中。如果你知道状态栏的功能,那么你显示应用程序窗口的屏幕截图有什么意义呢?@ElTomato重点是显示我得到的东西。(我已经从我的问题中删除了这个图像,因为它让每个人都感到困惑)@ElTomato对于您之前关于
awakeFromNib
方法中的代码的评论,我把它放在了那里,因为我下面的大多数教程都把它放在那里。我不是Objective-C忍者,也不是Obj-C的极端n00b,我正在努力学习它,所以我会感谢所有我能得到的帮助。是的,我发布了这个截图,因为这是我得到的,而不是我状态栏中的G?@JasdeepSingh你会得到一个
NSWindow
,因为这就是你的
MainMenu.xib
文件中的内容。我甚至从我的MainMenu.xib中删除了这个窗口,还是一样。哇!非常感谢你,我想我一直在听:)我创建了一个新项目并按照你的指示进行。注意到一些奇怪的事情,我在我的
applicationdFinishLaunching
方法中放了一个
NSLog
语句,令人惊讶的是,它根本没有被调用。我在某个地方读到,我需要将
应用程序的
代理出口连接到我的
AppDelegate
我也这样做了,但该方法仍然没有被调用。我认为这是问题的根源。我使用的是Xcode 5.0.2,不确定版本不匹配是否会导致问题?PS:另外,我仍然得到与之前相同的窗口:/终于开始工作了。你的指示奏效了,我只是使用了一个透明的png,它没有显示出来,我不得不点击状态栏来显示下拉列表。谢谢想知道为什么在代码中会重复两次此位:
statusItem=[[NSStatusBar systemStatusBar]statusItemWithLength:NSVariableStatusItemLength];statusImage=[NSImage ImageName:@“statusImage”];[statusItem setImage:statusImage];[状态项设置菜单:状态菜单]
@implementation AppDelegate
@synthesize menuItem1;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    [self setMainStatus];
}

- (void)setMainStatus {    
    statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
    statusImage = [NSImage imageNamed:@"statusImage"];
    [statusItem setImage:statusImage];
    [statusItem setMenu:statusMenu];

    NSMutableString *menuname1 = [[NSMutableString alloc] initWithString:NSLocalizedString(@"statusMenuShowApplication", @"Show Application Window")];
    menuItem1 = [[NSMenuItem alloc] initWithTitle:menuname1 action:@selector(statusApplicatinClicked:) keyEquivalent:@""];
    [statusMenu addItem:menuItem1];
}

- (void)statusApplicatinClicked:(id)sender {
    [self.window setIsVisible:YES]; 
}

@end
 [statusMenu addItem:[NSMenuItem separatorItem]];