Xcode NSStatusItem不显示图像和标题

Xcode NSStatusItem不显示图像和标题,xcode,macos,Xcode,Macos,我试图制作一个状态栏项目,比如右上角的电池或时间机器指示器。我的代码如下 - (void)activateStatusBarItem:(id)object{ NSStatusBar *systemBar = [NSStatusBar systemStatusBar]; NSStatusItem *theItem = [systemBar statusItemWithLength:NSVariableStatusItemLength]; NSImage *statusBarIcon = [NS

我试图制作一个状态栏项目,比如右上角的电池或时间机器指示器。我的代码如下

- (void)activateStatusBarItem:(id)object{
NSStatusBar *systemBar = [NSStatusBar systemStatusBar];

NSStatusItem *theItem = [systemBar statusItemWithLength:NSVariableStatusItemLength];

NSImage *statusBarIcon = [NSImage imageNamed:@"icon-sleep.png"];
statusBarIcon.size = CGSizeMake(NSSquareStatusItemLength, NSSquareStatusItemLength);

[theItem setImage:statusBarIcon];
[theItem setTitle:@"abc"];
[theItem setTarget:self];
[theItem setAction:@selector(showHUD:)];
}
此方法在应用程序启动时调用。然而,我在菜单上没有看到它们。它确实工作过一次,在没有图像的情况下使用相同的代码

此外,当我研究苹果公司的产品和方法时: -片名: -setImage: -设置目标: -设定动作: 所有人都说它们同时可用和贬值,请看下图。还有别的办法吗,我能做到。我希望在单击项目时显示一个窗口/面板,可能会连接到工具栏


您正在将图像大小设置为无意义的值<代码>NSSquareStatusItemLength为-2。这是一个哨兵值,不是实际长度

您需要使用
systemBar.thickness
来确定方形状态项的实际大小

关于不推荐使用的方法,在10.10中,
NSStatusItem
有一个新的
按钮
属性。应该使用此属性,而不是现在不推荐使用的
view
属性(您没有使用)。所有其他不推荐使用的属性现在都只是通过按钮上相应方法调用的cover方法。使用这些覆盖方法是安全的,它们应该仍然有效

您没有保留对状态项的强引用。它只是存储在一个局部变量中。如果您使用的是ARC,这意味着它将在
-activateStatusBarItem:
方法的末尾释放,该方法将其从状态栏中删除。因此,您正在快速地创建和删除它。您应该保留一个强引用,可能在实例变量中。对于
+[NSStatusBar statusItemWithLength:
,记录了保留强引用的要求:

接收方不保留对状态项的引用,因此您需要保留它。否则,对象将在解除分配时从状态栏中删除


谢谢,我可以用button属性做我需要的一切。但是,请告诉我应该如何使用视图属性,这样我以后就不会犯类似的错误了。仅仅使用target-action方法使图标响应单击并使用panel controller对象从.xib文件打开面板是不够的。从来没有必要使用
视图
属性。它适用于需要进行自定义绘图或事件处理的情况。