私はCocoaアプリケーション(.app)を持っていますが、別のCocoaアプリケーションから起動したいと思いますが、ここで問題はありませんが、多分main関数でargv []配列を使用していますか?ココアアプリケーション間でパラメータを渡す方法
答えて
NSWorkspaceを使ってアプリを起動し、NSDistributedNotificationCenterを使ってデータを渡しました。これは明らかに完全には開発されていませんが、うまくいきました。 docsの1つの警告 - 私が引数(この例では文字列)で送信した辞書は、サンドボックス化されたアプリケーションでは使用できません(辞書はゼロでなければなりません)。
- (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);
}
どのように2番目のCocoaアプリを起動しますか?
私がこれをしたとき、私は通常NSAppleScript
でAppleScriptを使って他のアプリと通信します。そのようにアプリを起動することもできます。もちろん、他のアプリはAppleScriptをサポートする必要があります。
両方のアプリケーションを制御できる場合は分散オブジェクトを使用することもできますが、より複雑です。
コマンドラインプログラムで作業する必要がある場合は、NSTask
が便利です。
また、カスタムURLスキームを使用することができます。 – paulmelnikow
私はopenURLメソッドを使用しています。これは、アプリケーションを起動するためのeaiserの方法であり、うまくいきます。私があなたが言及した両方のアプローチを探しています。 – willyMon
- 1. XAMLページ間で値(パラメータ)を渡す方法は?
- 2. Request-Scoped Controllers間でパラメータを渡す方法は?
- 3. Windows間のパラメータを渡す
- 4. Dapperでnullパラメータを渡す方法
- 5. JavaScriptでパラメータ名を渡す方法は?
- 6. Sql commandTextでintパラメータを渡す方法
- 7. JSパラメータでASP.NETサーバーサイドタグを渡す方法
- 8. mdxクエリでパラメータを渡す方法
- 9. 渡す方法のパラメータは
- 10. SSRS 2005のレポート間でパラメータを渡す
- 11. Velocityテンプレート間でパラメータを渡す
- 12. WordPressのページ間でパラメータを渡す
- 13. リレーコンテナ間で変数を渡す方法
- 14. アクティビティ間で値を渡す方法
- 15. アクティビティ間でカスタムクラスを渡す方法
- 16. pythonインスタンス間でオブジェクトを渡す方法
- 17. プロセス/アプリケーション間でIntPtrを渡す方法
- 18. URLパラメータをVuejsに渡す方法
- 19. パラメータをストレージに渡す方法Uri?
- 20. wpfコントロールコンストラクタのパラメータを渡す方法は?
- 21. ウィザードにパラメータを渡す方法
- 22. ウェブRTSPパラメータをVLCに渡す方法
- 23. webviewのjavascriptにパラメータを渡す方法
- 24. Laravel DB :: transaction()にパラメータを渡す方法
- 25. URLパラメータにテキストボックス値を渡す方法
- 26. Facebookにパラメータを渡す方法fb:// publish /?
- 27. ColdFusionデータベースクエリにパラメータ値を渡す方法
- 28. Marionette.CompositeView、Marionette.ItemViewにパラメータを渡す方法
- 29. ASP.NET MVCパラメータを渡す方法
- 30. - 型をパラメータとして渡す方法
分散通知をスプーフィングするのは簡単です。どのプロセスでも、どのデータでも1つを転記することができます。安全な何かのためにそれらに頼らないでください。 –
その情報をありがとうKurt。これを行うより安全な方法について何をお勧めしますか? – rdelmar
残念ながら、解決するのは簡単な問題ではありません。他にはそれほど便利ではありません。おそらく、UNIXドメインソケットや名前付きパイプを試してみてください。 10.7が必要な場合はXPC。あなたは、あなたと話している他のアプリがあなたが誰だと思っているかを確認しなければなりません。本当にその周りには何の方法もありません。 –