4

Mac OS X アプリ (Cocoa) で、NSDraggingSession. はNSDraggingItem、 protocol を実装するオブジェクトを使用してNSPasteboardItemDataProvider、ユーザーがデータをドロップしたときにデータを提供します。

画像を扱っているので、関連するタイプはNSPasteboardTypePNGkPasteboardTypeFileURLPromisekUTTypeFileURLcom.adobe.photoshop-imageおよびpublic.svg-imageです。これらの画像は遠隔地にあるため、ペーストボードに提供する前に、インターネットからダウンロードする必要があります。

- pasteboard(pasteboard:item:provideDataForType:)次のような方法でメソッドを実装します。

  • 要求されたタイプが の場合、kPasteboardTypeFileURLPromise貼り付け場所を取得し、将来ファイルが書き込まれる予定の場所を含む URL 文字列をペーストボードに作成して設定します。

  • 要求されたタイプが の場合、kUTTypeFileURLファイルをダウンロードし、一時的な場所を指定して、ダウンロードしたファイルをその場所に書き込みます。次に、場所の URL 文字列をペーストボードに設定します。

  • 要求されたタイプが他のタイプの場合、ファイルをダウンロードNSDataしてペーストボードにプレーンを設定します。

これらの操作はすべてメイン スレッドで実行されるため、解消したい遅延が発生します。

これらの操作をバックグラウンド スレッドで実行し、メイン スレッドに戻ってペーストボードに最終データを設定しようとしましたが、メソッドが前に終了するため、これは機能しません。

誰もそれを達成する方法を知っていますか?

4

1 に答える 1