检查当前在NSPasteBoard上复制的数据类型

时间:2012-06-12 23:18:39

标签: objective-c macos copy copy-paste nspasteboard

我正在开发一个应用程序,我需要知道哪些类型的数据被复制到NSPasteBoard。从文档中我知道,当我们复制文件NSPasteBoard的任何内容时,将该内容传递给粘贴板服务器,系统上的任何应用程序都可以从该服务器访问该数据。

现在,我想轮询粘贴板服务器并确定用户是否刚刚复制了一些文本内容,如果是文本内容,则应用程序将处理这些数据,否则忽略其他数据,如图片,文件夹等。 / p>


Apple文档的结果

从文档中我发现,当我们将数据设置到粘贴板上时,我们可以setData types。但是,如果我们在系统上复制一些文本内容,我不是100%确定正在设置什么类型的数据类型。 dataType方法中setData的参数为NSString


任何进一步的指导都会非常有用。

1 个答案:

答案 0 :(得分:6)

将文本复制到粘贴板的设计良好的应用程序应使用文档中列出的标准类型之一:

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSPasteboard_Class/Reference/Reference.html#//apple_ref/doc/uid/20000328-SW33

因此,您可以检查粘贴板上是否存在某些标准文字类型,例如NSPasteboardTypeStringNSPasteboardTypeRTF -[NSPasteboard availableTypeFromArray:]

应用程序可能会以多种不同的形式将数据放入粘贴板中。例如,如果您在Safari中复制文本,您将获得纯文本和富文本表示。这是支持各种应用程序的好方法;如果应用无法粘贴富文本,也许它可以粘贴纯文本,因此Safari会复制这两种文本。

从描述问题的方式来看,应用程序将多种类型复制到粘贴板这一事实可能会使确定文本是否被复制更具挑战性。例如,在Safari中复制图像会将图像数据复制到NSPasteboardTypeTIFF,但也会将URL复制到NSPasteboardTypeString。所以,(完全取决于你想要完成的事情)你可能想要检查是否缺少某些类型,比如NSPasteboardTypeTIFF,以及文本类型的存在,以确定是否复制了有用的文本。

探索粘贴板上所有数据的好方法是使用Apple的ClipboardViewer示例代码:http://developer.apple.com/library/mac/#samplecode/ClipboardViewer/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008825-Intro-DontLinkElementID_2