1

我是 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
}
4

2 回答 2

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链将被遍历,直到一个对象响应选择器。

于 2009-12-28T16:17:33.693 回答
1

动作需要一个目标,否则它们会被发送到 nil,然后应用新规则。

于 2009-12-28T16:08:26.673 回答