如何在cocoa应用程序之间传递参数

时间:2012-03-25 05:27:09

标签: macos cocoa

我有一个Cocoa应用程序(.app),我想从另一个Cocoa应用程序启动它,这里没问题,但有没有办法启动第二个应用程序传递一些参数?也许在main函数中使用argv []数组?

2 个答案:

答案 0 :(得分:3)

我使用NSWorkspace启动应用程序,NSDistributedNotificationCenter传递数据。这显然还没有完全发展,但它确实有效。来自文档的一个警告 - 我使用参数发送的字典(在此示例中只是一个字符串)不能在沙盒应用中使用(字典必须为nil)。

这是在打开其他应用的应用中:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{
ws = [NSWorkspace sharedWorkspace];
NSNotificationCenter *center = [ws notificationCenter];
[center addObserver:self selector:@selector(poster:) name:NSWorkspaceDidLaunchApplicationNotification object:nil];
[ws launchApplication:@"OtherApp.app"];
}

-(void)poster:(NSNotification *) aNote 
 {
NSDistributedNotificationCenter *center = [NSDistributedNotificationCenter defaultCenter];
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"theDataToSend" forKey:@"startup"];
[center postNotificationName:@"launchWithData" object:nil userInfo:dict];
NSLog(@"Posted notification");
 }

这是在打开的应用程序中:

-(void)awakeFromNib 
{
NSDistributedNotificationCenter *center = [NSDistributedNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(doStartup:) name:@"launchWithData" object:nil];
}

 -(void)doStartup:(NSNotification *) aNote 
    {
    NSLog(@"%@",aNote.userInfo);
    }

答案 1 :(得分:1)

你是如何推出第二个Cocoa应用程序的?

当我完成此操作后,我通常会通过NSAppleScript使用AppleScript与其他应用进行通信。您也可以通过这种方式启动应用。当然,其他应用程序必须支持AppleScript。

如果您可以控制两个应用程序,也可以使用分布式对象,但它更复杂。

如果您必须使用命令行程序,则NSTask非常有用。