我有一个Cocoa应用程序(.app),我想从另一个Cocoa应用程序启动它,这里没问题,但有没有办法启动第二个应用程序传递一些参数?也许在main函数中使用argv []数组?
答案 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
非常有用。