1

Finderでファイル、テキスト、画像をアプリケーション(またはDock)にドラッグアンドドロップして起動または呼び出すのと同じように、NSPasteboardデータを使用してアプリケーションを起動(またはAppleEventsを使用して送信)したいと思います。アプリ内のデータ。

LSOpenFromURLSpecのような起動サービス関数はファイルに対してのみ機能し、AppleEventsの任意のパラメーターに対するオプションがあるようですが、これを機能させる方法がわかりませんでした。

もう1つの質問はサンドボックス化可能ですが、それがまだ可能かどうかはわかりません。

ありがとうございました。

4

1 に答える 1

2

あなたが受信者である場合、何が起こるかは、ユーザーが何をドロップしているかによって異なります。

  • 1つ以上のファイル

    アプリケーションには、1つ以上のオープンドキュメントAppleEventsが送信されます。NSApplicationは、ドキュメントコントローラーを試す前に、少なくとも1つのメッセージ(実際には1つだけである必要がありますが、これはいくつかのバージョンでは壊れています)をアプリデリゲートに送信しようとします。

  • 1つ以上のURL(ファイルではない:スキーム)

    アプリケーションには、1つ以上のget-URLイベントが送信されます。このためには、Appleイベントハンドラーを実装する必要があります。便利なことに、これはAppleイベント処理ドキュメントが使用する例です。

  • その他のデータ

    サービスを実装する必要があります。Dockドロップに使用されるサービスはタイプに基づいて自動検出され、複数の一致の中からどのように選択されるかはわかりません。Dockで利用できるものとして特定のサービスのみを指定する方法はありません。NSPasteboardに関して正しく推測しました。I/Oにペーストボードを使用してサービスを実装します。


あなたが送信者である場合:

  • ファイルの送信

    最も簡単な方法は、LaunchServicesを使用することです。これにより、あなたに代わって適切なAppleイベントが送信されます。

  • URLの送信

    繰り返しになりますが、LaunchServicesは必要なAppleイベントを送信します。実際、最新のコードでは、ファイルURLと非ファイルURLの両方に同じLSOpenAPIを使用する可能性があります。

  • その他のデータの送信

    受信側のアプリケーションはサービスを実装する必要があるため、サービスを実行する必要があります。

    難しいのは発見です。実行したいサービスを知る必要があり、それが利用可能である必要があります。どのアプリケーションに送信するか(ドロップオンをシミュレートする)を知っていると思います。これは、サービスに送信する予定のほとんどの人にとっては足がかりです。ターゲットアプリケーションのInfo.plistを調べて、自分のタイプに最適なサービスを見つける必要があると確信しています。

    潜在的な問題の1つは、アプリケーションバンドルを指定できないことです。ターゲットアプリケーションのサービスが[サービス]メニューに表示されるようになっていることを期待する必要があります。また、正しいメニュー項目名を自分で把握する必要があります。(対応を導き出すために、独自のサービスメニューに表示される内容を試してください。)正しいサービスアイテム名を考え出し、サービスが有効になっている場合でも、サービスがアプリケーションによって実行される保証はありません。あなたが見ていたバンドル—それは異なるバージョンであるかもしれませんし、同じ名前のサービスを持っている異なるアプリでさえあるかもしれません(おそらく名前がどのように構築されているかに依存します)。

    これについてレーダーを提出することをお勧めします。

于 2012-11-09T18:51:55.433 に答える