1

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

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


Apple 文档中的发现

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


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

4

1 回答 1

6

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

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

因此,您可以检查粘贴板上是否存在某些标准文本类型,例如NSPasteboardTypeStringor NSPasteboardTypeRTF-[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-简介-DontLinkElementID_2

于 2012-06-13T02:16:56.283 回答