Mac OS X アプリ (Cocoa) で、NSDraggingSession
. はNSDraggingItem
、 protocol を実装するオブジェクトを使用してNSPasteboardItemDataProvider
、ユーザーがデータをドロップしたときにデータを提供します。
画像を扱っているので、関連するタイプはNSPasteboardTypePNG
、kPasteboardTypeFileURLPromise
、kUTTypeFileURL
、com.adobe.photoshop-image
およびpublic.svg-image
です。これらの画像は遠隔地にあるため、ペーストボードに提供する前に、インターネットからダウンロードする必要があります。
- pasteboard(pasteboard:item:provideDataForType:)
次のような方法でメソッドを実装します。
要求されたタイプが の場合、
kPasteboardTypeFileURLPromise
貼り付け場所を取得し、将来ファイルが書き込まれる予定の場所を含む URL 文字列をペーストボードに作成して設定します。要求されたタイプが の場合、
kUTTypeFileURL
ファイルをダウンロードし、一時的な場所を指定して、ダウンロードしたファイルをその場所に書き込みます。次に、場所の URL 文字列をペーストボードに設定します。要求されたタイプが他のタイプの場合、ファイルをダウンロード
NSData
してペーストボードにプレーンを設定します。
これらの操作はすべてメイン スレッドで実行されるため、解消したい遅延が発生します。
これらの操作をバックグラウンド スレッドで実行し、メイン スレッドに戻ってペーストボードに最終データを設定しようとしましたが、メソッドが前に終了するため、これは機能しません。
誰もそれを達成する方法を知っていますか?