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