在Cocoa中为NSMenuItem设置目标/操作的正确方法?

我正在进行一些初步的Cocoa编程,我遇到了一些真正的困难。 基本上,我有一个带有
NSMenu
NSStatusBar
项目作为菜单。菜单有一个
NMMenuItem
。在IB中,我将NSMenuItem连接到一个
NSObject
,它本身被设置为ApplicationDelegate的类;然后我将Received Actions设置为ApplicationDelegate中的
IBAction
方法。我认为一切都正确连接,除非我运行程序并单击菜单项时不调用
IBAction
方法。我真的无法解决这个问题。这是相关的代码。 应用程序委托h文件:
#import <Cocoa/Cocoa.h>

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

- (IBAction)showPreferencePanel:(id)sender;

@end
应用程序委托m文件:
#import "sssAppDelegate.h"
@implementation sssAppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application 
}

-(void)awakeFromNib{
    statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
    [statusItem setMenu:statusMenu];
    [statusItem setTitle:@"Status"];
    [statusItem setHighlightMode:YES];
}


- (IBAction)showPreferencePanel:(id)sender {
    NSLog(@"Hello World!");
}

@end 
正如我所说,在IB中,我已将应用程序代表中的
NSMenu
连接到
statusMenu
(因此菜单全部显示在
NSStatusBar
下),并且我已将
NSMenu
中的
NSMenuItem
连接到应用委托类的
NSObject
,并将其挂钩最多调用showPreferencePanel,但是当我运行它时没有任何反应!!! 我也以编程方式尝试了它,但仍然无法调用IBAction方法。 编辑:我会附上一些屏幕抓取来显示IB中的设置,但我还没有被允许。 主要的笔尖包含添加到
NSStatusBar
的菜单,它看起来像这样: FO
NSApplication
FR
FirstResponder
申请
NSApplication
字体管理器
NSFontManager
主菜单
NSMenu
菜单项(首选项)
NSMenuItem
Sss App代表
sssAppDelegate
NSMenuItem: 已发送操作 -
showPreferencePanel
--->
Sss App Delegate
Sss App代表: 奥特莱斯 -
statusMenu
--->
Main Menu
收到的行动 -
showPreferencePanel:
--->
Main Item (Preferences)
    
已邀请:
以编程方式,您尝试过:
[statusItem setTarget:someTarget];
[statusItem setAction:@selector(someSelector)];
它应该工作。     

要回复问题请先登录注册