2

Apple OS X Cocoa フレームワークを使用して、別のプロセスのウィンドウにシート(スライドダウン モーダル ダイアログ)を投稿するにはどうすればよいですか?

編集:少し明確に:

私のアプリケーションは、Subversion のバージョン管理を行うための Finder 拡張機能です ( http://scplugin.tigris.org/ )。私のアプリケーションの一部はプラグイン (Finder のコンテキスト メニュー項目) です。ただし、私のアプリケーションの大部分は別のデーモン プロセスにあります。いくつかの理由から、事実上すべてのコードをデーモンに入れることにしました。プラグインはメニュー自体のみを定義し、Apple-Events は Daemon に渡します。

デーモンは、ユーザーに詳細情報の入力を求める必要がある場合があります。このために画面上にウィンドウを投げることができますが、それは破壊的です (ランダムに配置されます)。ここでのワークフローは合法的にモーダルであるように思えます。たとえば、「ファイルを選択し、メニューから「コミット」を選択し、コミット コメントを提供します。 、操作を行ってください。」

プロセス間の連携 (ある種の参照を渡すなど) は許容されます。どちらのプロセスも私のものですが、シートのコードをプライマリ プロセスにバインドすることは避けたいと考えています。

4

4 に答える 4

5

実際、プロセス間通信をビュー レベルで実行しようとしているように思えますが、これは Cocoa の一般的な動作ではありません。レイヤーをもう少し分離すると、作業がはるかに簡単になります。

シートコードを他のプロセスに入れてみませんか?これはビュー コードであり、ビュー コードは本質的にプロセス固有です。ここで行うべき正しいことは、プラグイン コードに多少一般的なモーダル シート サポートを追加し、デーモンがそのコードを呼び出すために行うことができる IPC 呼び出しを追加することです。ビュー オブジェクトをリモート プロセスに送り込もうとするのは、たとえそれを機能させることができたとしても、悪夢のようです。

このアプローチでフレームワークと戦っています。

于 2008-09-15T18:34:32.940 に答える
2

別のプロセスのウィンドウにシートを追加することはできません。これは、他のプロセスのウィンドウへのアクセスが最も制限されているためです。

于 2008-09-16T00:12:22.800 に答える
1

考慮すべきもう 1 つの点は、OS X では、同じフォルダーで多くの Finder ウィンドウを開くことができるということです (OS 9 とは異なります)。シートを Finder ウィンドウに追加するのに十分な権限/API を持っていたとしても、そのウィンドウのモダリティによってユーザーがファイルの操作を続行できなくなるわけではありませ

(長年の Mac ユーザーである私の個人的な意見では、この種のやり取りは私を壁のすぐ上まで追いやるだろう.)

于 2008-09-17T22:00:41.320 に答える
1

これをしないでください。可能であれば、インタラクションを非モーダルにします。特にコミットのようなものでは、コミット コメントを書いている間にファイルをブラウズできるととても便利です。

OS X にはウィンドウ グループがありますが、(簡単に) 複数のアプリケーションにまたがることはできないと思います。

于 2008-09-15T20:50:38.713 に答える