在Mac应用程序(Cocoa)中,我使用NSDraggingSession将一些图像从我的应用程序复制到其他应用程序。NSDraggingItem利用实现协议NSPasteboardItemDataProvider的对象,在用户删除数据时提供数据。
在我处理图像时,涉及的类型有:NSPasteboardTypePNG、kPasteboardTypeFileURLPromise、kUTTypeFileURL、com.adobe.photoshop-image和public.svg-image。这些图片是在一个遥远的位置,所以我可以提供他们到黑板,我必须从互联网下载他们。
我实现了- pasteboard(pasteboard:item:provideDataForType:)方法,这样做如下:
kPasteboardTypeFileURLPromise,我将得到粘贴位置,并在剪贴板中构建并设置URL字符串,其中包含未来应该写入文件的位置。kUTTypeFileURL,我将下载该文件,指定一个临时位置,并将下载的文件写入该位置。然后,我在剪贴板上设置位置的URL字符串。NSData。所有这些操作都是在主线程上执行的,产生了一些我想要消除的滞后。
我尝试在后台线程上执行这些操作,然后返回主线程,以设置pasteboard中的最终数据,但这不起作用,因为该方法已经完成。
有谁知道实现这个目标的方法吗?
发布于 2015-09-05 20:44:08
承诺的纸板类型通常意味着作为一种替代格式的数据,您已经有,在这里,您希望避免在时间和内存的费用转换之前,它是必要的。我认为使用它来推迟下载任何数据都是不合适的。首先,当最终被请求时,下载可能会失败。另一方面,它可能需要一段任意长的时间,因为你现在正在挣扎。
所以,我认为你应该提前下载这些数据。要么将其保存在内存中,要么将其保存到临时文件中。使用承诺的类型,如果适当的话,以不同的形式交付,但要事先准备好。
https://stackoverflow.com/questions/32416376
复制相似问题