【问题标题】:Check what type of data is currently copied on NSPasteBoard检查当前在 NSPasteBoard 上复制的数据类型
【发布时间】:2012-06-12 23:18:38
【问题描述】:

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

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


来自 Apple 文档的发现

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


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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    应用程序可以以多种不同的形式将数据放入粘贴板。例如,如果您在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 2011-07-15
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      相关资源
      最近更新 更多