【问题标题】:Cocoa - How to pass a parameter with NSMenuItem's action?Cocoa - 如何通过 NSMenuItem 的操作传递参数?
【发布时间】:2012-10-02 01:32:26
【问题描述】:

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

+ (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:),我会收到未捕获的异常错误。

【问题讨论】:

  • 您能否提供您正在调用的导致崩溃的实际代码?
  • 在我调用 action:@selector(goToURL:mid:) 的地方添加了完整功能...我还在 XCode 中收到“未使用的变量中间”警告..​​.我正在使用它!

标签: objective-c cocoa


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多