我有一个Cocoa应用程序(.app),我想从另一个Cocoa应用程序启动它,这里没有问题,但有什么方法可以启动第二个应用程序传递它的一些参数吗?也许在主函数中使用argv []数组?如何在可可应用程序之间传递参数
回答
我这样做是使用NSWorkspace启动应用程序和NSDistributedNotificationCenter来传递数据。这显然没有完全开发,但它的工作。文档中的一个警告 - 我用参数发送的字典(本例中只是一个字符串)不能在沙盒应用中使用(字典必须为零)。
这是在打开的其他应用程序的应用程序:
- (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);
}
你如何启动第二个可可应用程序?
当我这样做时,我通常通过NSAppleScript
使用AppleScript与其他应用程序进行通信。您也可以启动应用程序。当然,其他应用程序必须支持AppleScript。
如果您可以控制这两个应用程序,也可以使用分布式对象,但它更复杂。
如果您曾经需要使用命令行程序,那么NSTask
很有用。
您也可以使用自定义URL方案。 – paulmelnikow 2012-03-25 13:48:09
好吧我使用的方法openURL你知道这是eaiser的方式来启动一个应用程序,它工作正常,我正在寻找你提到的两种方法,非常感谢。 – willyMon 2012-03-25 18:50:42
- 1. 如何在rails应用程序之间传递参数?
- 2. 如何将参数传递给可可触摸应用程序
- 3. 在AS400中的程序之间传递可选参数
- 4. 如何在iOS和TvOS应用程序之间传递数据?
- 5. 如何在两个Chrome应用程序之间传递数据?
- 6. 如何在进程/应用程序之间传递IntPtr
- 7. 如何在rails应用程序之间传递CSRF令牌
- 8. 如何在应用程序域之间传递事件?
- 9. 在应用程序/进程之间传递数据
- 10. 可能通过NFC传递Android应用程序并传递参数
- 11. 在VB6应用程序和.net应用程序之间传递数据
- 12. 在客户端应用程序和Web应用程序之间传递数据
- 13. 传递对象/线程之间的数据可可
- 14. 在两个Azure应用程序之间传递数据
- 15. 在ASP.NET应用程序之间传递会话数据
- 16. 在Android应用程序之间传递字符串数据
- 17. 在C++(MFC)应用程序和C#之间传递数据
- 18. 在iPhone应用程序之间传递数据
- 19. 如何在参数之间传递参数
- 20. Web应用程序HTML参数传递
- 21. 在可可中的子视图之间传递数据
- 22. 试图创建一个可以应用程序域之间传递的参数C#类
- 23. 在页面之间传递jQuery参数
- 24. 在.NET和PLSQL之间传递参数
- 25. 在JSP之间传递参数
- 26. Java在方法之间传递参数
- 27. Struts - 在动作之间传递参数
- 28. Android:在类之间传递参数
- 29. 可以在进程之间传递Perl哈希引用吗?
- 30. 如何使用va_args传递参数(可变参数,省略号)
请注意,欺骗分布式通知是微不足道的。任何进程都可以发布任何数据。不要依赖他们的任何安全。 – 2012-03-25 21:17:40
感谢您的信息库尔特。你有什么建议以更安全的方式来做到这一点? – rdelmar 2012-03-25 21:21:28
不幸的是,这不是一个容易解决的问题。没有别的东西几乎如此方便。也许尝试UNIX域套接字或命名管道。 XPC如果你可以要求10.7。您仍然必须确保与您交谈的其他应用程序是您认为的那个应用程序 - 实际上并没有任何解决方法。 – 2012-03-25 21:34:08