出现双重状态项目图标

时间:2011-07-07 00:39:48

标签: cocoa menuitem statusbar menubar

我正在尝试在xcode 4上创建一个简单的菜单栏应用程序。一切都确实有效,但我不明白的是图标在菜单栏中出现两次。两个图标中的一个实际上工作,并提供带有工作按钮的下拉菜单,另一个只是在点击时更改为突出显示的图标图像,并在发布时返回,没有做任何事情,甚至没有显示下拉菜单。

这是我找到并测试过的代码:

- (void) awakeFromNib{

//Create the NSStatusBar and set its length
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain];

//Used to detect where the files are
NSBundle *bundle = [NSBundle mainBundle];

//Allocates and loads the images into the application which will be used for the NSStatusItem
statusImage = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"icon" ofType:@"png"]];
statusHighlightImage = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"icon-alt" ofType:@"png"]];

//Sets the images in the NSStatusItem
[statusItem setImage:statusImage];
[statusItem setAlternateImage:statusHighlightImage];

//Tells the NSStatusItem what menu to load
[statusItem setMenu:statusMenu];

//Sets the mouse over text
[statusItem setToolTip:@"My Custom Menu Item"];

//Enables highlighting
[statusItem setHighlightMode:YES];

然后释放图像

- (void) dealloc {
//Releases the 2 images we loaded into memory
[statusImage release];
[statusHighlightImage release];
[super dealloc];

和头文件:

@interface MenuletApp : NSObject <NSApplicationDelegate> {
NSWindow *window;

IBOutlet NSMenu *statusMenu;

NSStatusItem *statusItem;
NSImage *statusImage;
NSImage *statusHighlightImage;

使用IBAction在单击其中一个项目时记录Hello World,并在单击另一个项目时终止。

我使用了一个针对XCode 3的教程,所以可能其中一个步骤的执行方式不同,但查看代码时我不知道第二个状态项的创建位置。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

-awakeFromNib有可能被调用两次吗? (尝试在其中添加日志消息)。也许你的xib文件中有两个这个类的对象?

另外,我建议将其移至-applicationDidFinishLaunching: