1

ファイル、URL、およびテキストからアプリのドック アイコンへのドロップを受け入れることができるようにしたいと考えています。ファイル (public.file-url) は URL (public.url) のサブタイプであるため、Info.plist に 2 つのサービス エントリだけを追加しました。

Services
  Item 0 (processURL)
    Instance method Name = processURL
    Send Types
      Item 0 = public.url
    Menu
      Menu item title = Process URL
  Item 1 (processString)
    Instance method Name = processString
    Send Types
      Item 0 = public.plain-text
    Menu
      Menu item title = Process Text

次に、 を-applicationDidFinishLaunching呼び出し、アプリケーション デリゲートに[NSApp setServicesProvider: self]いくつかのメソッド (-processString:userData:errorおよび) を記述しました。-processURL:userData:errorアプリ アイコンは、3 種類すべてのドロップを受け入れるようになりました。この-processURL:...メソッドでは、ローカル ファイルかどうかを簡単に確認できるため、両方のケースを処理できます。

ただし、1つのケースはまだ私を逃れています。ウィンドウのプロキシ アイコンをアプリにドラッグしようとすると、ドロップを受け入れることができるかのようにアイコンが強調表示されますが、メソッドが呼び出されません。

Xcode、ターミナル、プレビュー、およびいくつかのサードパーティ アプリからプロキシ アイコンをドロップしようとしましたが、サービス メソッドを呼び出すものはありませんでした。しかし奇妙なことに、Finder からドロップされたプロキシ アイコンは正常に機能しました。

(物理階層のベース タイプ) に変更しようとしpublic.urlましpublic.itemたが、メソッドがまだ Finder 以外のプロキシ アイコンに対して呼び出されません。

-typesFinder がアプリにプロキシ アイコンを正常にドロップすると、提供されるpboard は次のようになります。

  • "public.file-url",
  • "CorePasteboardFlavorType 0x6675726C",
  • "dyn.ah62d4rv4gu8y6y4grf0gn5xbrzw1gydcr7u1e3cytf2gn",
  • NSFilenamesPboardType、
  • "dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwu",
  • 「Apple URL ペーストボードタイプ」

これらをそれぞれ「送信タイプ」として直接使用してみました。「public.file-url」と「NSFilenamesPboardType」は、ドロップを受け入れるかのようにアイコンを強調表示しますが、受け入れません。当然のことながら、他のものはドック アイコンを強調表示しません。

通常のファイルとは異なる UTI を持つプロキシ アイコンへの参照が見つかりません。彼らは?それは奇妙だろう。

プロキシ アイコンを任意のウィンドウからターミナル ウィンドウにドラッグできるため、これが可能であることはわかっています。私は何が欠けていますか?

更新: NSView から、「public.url」を含めると、上記の Finder-registerForDraggedTypesとまったく同じリストで、すべてのアプリからプロキシ アイコンがドロップされます。-typesしたがって、ドック アイコンを介してドロップを受け取ることは明らかに特別なことです。これは何らかの形でまだ可能です。(Finder 以外の) ウィンドウ (Xcode の .xcworkspace など) からプロキシ アイコンをターミナル ドック ウィンドウにドラッグすると、問題なく認識されます。

4

2 に答える 2