Cocoa 为什么NSMenu的子类没有响应?

Cocoa 为什么NSMenu的子类没有响应?,cocoa,subclass,nsmenu,Cocoa,Subclass,Nsmenu,我在一个单独的xib文件中创建了一个菜单资源,使其成为一个子类NSMenu,如下所示,文件的所有者是StatusMenu @interface StatusMenu : NSMenu { @private IBOutlet NSMenuItem *menuitem1; IBOutlet NSMenuItem *menuitem2; } - (IBAction)action1:(id)sender; - (IBAction)action2:(id)sender; - (void)

我在一个单独的xib文件中创建了一个菜单资源,使其成为一个子类NSMenu,如下所示,文件的所有者是StatusMenu

@interface StatusMenu : NSMenu
{
@private
    IBOutlet NSMenuItem *menuitem1;
    IBOutlet NSMenuItem *menuitem2;
}

- (IBAction)action1:(id)sender;
- (IBAction)action2:(id)sender;
- (void)show;
@end
其中show方法按以下方式实现

- (void)show
{
    NSImage *menuImage = [[NSImage alloc] initWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"myicon" ofType:@"png"]];

    statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
    [statusItem setImage:menuImage];
    [statusItem setMenu:self];
    [statusItem setHighlightMode:YES];
}
然后我在app委托中创建并启动了StatusMenu实例,如下所示

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    statusMenu = [[StatusMenu alloc] init];
    statusMenu.user = self.user;
    [statusMenu show];
}

现在,我可以看到状态栏上的图标。但当我点击图标时,没有任何响应。有什么不对劲吗

您通常不会将
NSMenu
子类化来完成您想要做的事情

您只需创建另一个类(称之为
MenuController
或其他什么),将其放在故事板/xib中,并在
AppDelegate
中为其提供一个出口


.

这有很多问题。你到底想实现什么?Rob,我想实现的是干净的代码。我不想把所有菜单处理代码(action1、action2等)塞进我的主AppDelegate类中。