Cocoa - 如何使用NSMenuItem的动作传递参数?

时间:2012-10-02 01:32:27

标签: objective-c cocoa

我正在以编程方式创建菜单:

+ (void)refreshStatusMenu {
    for (NSDictionary *dict in kbMsgSet) {
        NSString *msj = [dict objectForKey:@"msj"];
        NSString *mid = [dict objectForKey:@"mid"]; // <- this would be http://www.blah.com 

        msg_item = [[NSMenuItem alloc] initWithTitle:[NSString stringWithFormat:@"%@", msj] action:@selector(goToURL:mid:) keyEquivalent:@""];

        [msg_item setTarget:[self class]];
        [sm insertItem:msg_item atIndex:(i_msg)];
        i_msg++;
        //...
    }
}

如何将参数传递给@selector(goToURL:),以便在项目点击时我可以调用:

+ (void)goToURL:(id)obj {
    NSLog(@"Open url:...%@", obj);
}

如果我尝试传递@selector(goToURL:var2:),我会收到未捕获的异常错误。

1 个答案:

答案 0 :(得分:6)

动作方法不能有2个参数。应该只有一个发件人,在这种情况下,它将是菜单项。请参阅this question的答案,了解如何将额外信息附加到菜单项并在操作方法中检索它。