在 Mac OS X 应用程序 (Cocoa) 中,我使用NSDraggingSession
. 使用NSDraggingItem
实现协议的对象,NSPasteboardItemDataProvider
在用户丢弃它时提供数据。
当我处理图像时,所涉及的类型是:NSPasteboardTypePNG
、、、和。这些图像位于远程位置,因此在将它们提供给粘贴板之前,我必须从 Internet 下载它们。kPasteboardTypeFileURLPromise
kUTTypeFileURL
com.adobe.photoshop-image
public.svg-image
我实现了- pasteboard(pasteboard:item:provideDataForType:)
这样的方法:
如果请求的类型是
kPasteboardTypeFileURLPromise
,我将获取粘贴位置,并在粘贴板中构建并设置 URL 字符串,其中包含将来应该写入文件的位置。如果请求的类型是
kUTTypeFileURL
,我下载文件,指定一个临时位置并将下载的文件写入该位置。然后,我在粘贴板中设置了该位置的 URL 字符串。如果请求的类型是其他类型之一,我下载文件并
NSData
在粘贴板中设置纯文本。
所有这些操作都在主线程上执行,产生了一些我想摆脱的滞后。
我尝试在后台线程上执行这些操作,然后返回主线程在粘贴板中设置最终数据,但这不起作用,因为该方法之前完成。
有谁知道实现它的方法?