有没有一种方法可以针对源应用程序明确声明它将提供的内容而对NSPasteboard进行过滤?

我正在尝试在应用程序中序列化粘贴板数据。当另一个应用程序将RTF文件放置在粘贴板上,然后询问可用的类型时,我会得到11种不同的所说RTF样式,从原始RTF到纯字符串再到dyn。*值。

将所有数据保存到plist或磁盘上的原始数据通常不成问题,因为它很小,但是当将任何大小的图像放置在粘贴板上时,结果输出可能比源大数十倍。数据(通过过滤可提供多种TIFF和PICT数据)。

如果可能的话,我只想保存原始应用程序提供的功能。

约翰,您比我本人或与我一起工作的绅士要谨慎得多,自从恐龙在地球上漫游以来,他一直在从事Mac编程。我们俩都没有注意到您突出显示的文字...而且我也不知道为什么。开始解决这个问题的时间太长了。

虽然我接受了您的答案作为正确答案,但它并不能完全回答我的原始问题。我正在寻找的是一种仅通过将其放置在粘贴板上即可知道可以由提供商提供的哪种类型的食品,从而可以识别可能成为其他口味的调味品的方法。在遍历类型列表时,将为我提供提供它们的应用程序的优先顺序,但它不会告诉我可以安全忽略的那些,因为稍后我重新填充粘贴板时将重新创建它们。

我得出的结论是,没有一种“好的”方法可以做到这一点。 [NSPasteboard declaredTypesFromOwner]很棒,但是它不存在。

最佳答案

-[NSPasteboard types]将返回剪贴板上数据的所有可用类型,但应返回它们"in the order they were declared."
-[NSPasteboard declareTypes:owner:]的文档说"the types should be ordered according to the preference of the source application."

因此,正确实现的粘贴板所有者应将内容的最丰富表示形式(可能是原始内容)声明为第一类型;因此,合理的单一表示应为:

[pb dataForType:[[pb types] objectAtIndex:0]]

关于cocoa - 取消过滤NSPasteboard,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54760/

10-13 02:57