Cocoa - setAction的Pass参数

时间:2010-06-21 23:39:16

标签: objective-c cocoa

我以为我会尝试创建一个简单的可可应用程序。它是reddit的简单收件箱通知程序。我带来了一堆URL,并希望为每个URL创建菜单项,并带有指向该页面的链接。我想动态地设置每个动作。我需要将URL传递给方法,因此它知道要去哪里。我有一种感觉,我这样做是错的。有人能指出我正确的方向。我想创建一个NSURL并将其发送到loadMessage。

NSURL *tempURL   = [NSURL  URLWithString:[NSString stringWithFormat:@"http://www.reddit.com%@", [[message objectForKey:@"data"] objectForKey:@"context"]]];

[temptItem setAction:@selector(loadMessage:messageUrl:)];

2 个答案:

答案 0 :(得分:1)

该选择器不是有效的操作消息。动作可以接受一个参数或者不接受;如果他们接受一个参数,则参数中传递的对象将是发送消息的控件。

您需要做的是在控制器中创建一个方法,使用正确的对象调用loadMessage:messageURL:方法。

答案 1 :(得分:1)

正如查克所说,那个选择器有错误的形式。一种方法是使用-representedObject来例如将该项与URL相关联:

- (void)menuAction:(id)sender {
    [[NSWorkspace sharedWorkspace] openURL:[sender representedObject]]; 
}

// adding an item:
NSURL *url = [NSURL URLWithString:@"http://google.com/"];    
NSMenuItem *item = [[[NSMenuItem alloc] initWithTitle:@"moo" 
                    action:@selector(menuAction:) keyEquivalent:@""] autorelease];
[item setTarget:self];
[item setRepresentedObject:url];
[item setEnabled:YES];    
// insert into menu