我是Obj-C / Cocoa编程的新手,我在尝试动态地将菜单项添加到NSMenu实例并在插入时已经设置了项动作选择器时遇到了问题。
我可以,添加动态菜单项,但是当通过菜单点击项目时,动作选择器不会触发。
下面第一行是我用来添加菜单项的代码行。您可以设置我将动作:(SEL)aSelector设置为“openEchowavesURL”功能。
这个函数在同一个控制器类文件中,我已经包含了下面的函数定义。
我只是调用了错误的选择器语法或某些东西?或者单击时让菜单项调用选择器的技巧是什么?
[statusMenu insertItemWithTitle:[NSString stringWithFormat:@"%d - %@", convo.newMessagesCount, convo.ewName] action:@selector(openEchowavesURL:) keyEquivalent:@"" atIndex:0];
- (void)openEchowavesURL:(id)sender {
// function details here
}
答案 0 :(得分:11)
如果您希望针对您的对象触发操作,则必须为新NSMenuItem指定目标:
NSMenuItem *item = [statusMenu insertItemWithTitle:[NSString stringWithFormat:@"%d - %@", convo.newMessagesCount, convo.ewName] action:@selector(openEchowavesURL:) keyEquivalent:@"" atIndex:0];
[item setTarget:self]; // or whatever target you want
如果你不这样做,那么NSResponder链将会走,直到一个对象响应选择器。
答案 1 :(得分:1)
操作需要一个目标,否则它们会被发送到零,然后适用新规则。