我正在使用NSPasteboard从中读取数据并使用接收到的数据执行操作。
具体而言,我对按优先顺序排列的类型信息感兴趣。
这就是我在代码中所拥有的
_pasteBoard = [NSPasteboard generalPasteboard];
NSArray *types = [_pasteBoard types];
NSArray *files = [_pasteBoard propertyListForType: NSFilenamesPboardType];
NSString *text = [_pasteBoard propertyListForType: NSStringPboardType];
NSString *text2 = [_pasteBoard propertyListForType: NSPasteboardTypeString];
NSString *rtfText = [_pasteBoard propertyListForType: NSRTFPboardType];
NSData *imageData = [_pasteBoard dataForType: NSTIFFPboardType];
现在,我只是测试我是否能够获得所需的数据。因此,当我在Destkop上选择一些文件时,文件包含所选的文件URL。这样才有用。
类似地,当我选择图像的某些部分并将其复制到剪贴板时,imageData包含一些数据,然后我将其写入另一个文件,并且可以看到只复制了所选的部分,因此也可以。另外,我理解当我复制图像时#34;文件"然后,对于剪贴板,imageData也不会是nil,但这没关系,因为最高优先级是文件URL,这就是需要做的事情。
我遇到的问题是与从粘贴板读取文本相关的行。
NSString *text = [_pasteBoard propertyListForType: NSStringPboardType];
NSString *text2 = [_pasteBoard propertyListForType: NSPasteboardTypeString];
NSString *rtfText = [_pasteBoard propertyListForType: NSRTFPboardType];
问题描述:
我复制了此页面的网址以及" text"和" text2"包含来自粘贴板的字符串。所以这里很好:))
我从TextEdit中打开的.cs代码文件中复制了一些行,剪贴板显示我有" public.utf8-plain-text"和" NSStringPboardType"但"文字"和" text2"都是零;
从同一个C#.NET .cs文件中,我选择一个单词,没有任何中断,例如。 " System.Threading",剪贴板显示我有" public.utf8-plain-text"和" NSStringPboardType"以及" text"和" text2"有复制的文本,但任何用空格或行复制的东西都不会。 " myProject.Core.Helpers"将工作,但"命名空间myProject.Core.Helpers"不会
同样,我从RTF文件中复制了一些文本,剪贴板显示我有很多与RTF相关的信息以及相同的旧" public.utf8-plain-text"和" NSStringPboardType"也是类型,但再次" text"," text2"而且,这一次," rtfText"都没有。
那么,如何从剪贴板中获取所有需要的文本?我知道RTF数据可以包含更多文本,但我只关心将文本输出到字符串文件中。
非常感谢任何帮助。
谢谢!
答案 0 :(得分:1)
问题几乎可以肯定,您不会在粘贴板上考虑多个项。在过去(OS X 10.5及更早版本),粘贴板上只有一个项目。该项目可以有多种类型,这些类型应该是同一事物的表示。
现在,粘贴板可以有多个项目。每个项目仍然可以有多种类型。 -types
方法返回所有项的类型的并集。但-propertyListForType:
只会检查第一项。
您可以迭代-pasteboardItems
返回的数组,并询问每个类型的类型,然后获取每种类型的属性列表对象。
或者,对于您感兴趣的每种类型,您可以使用相应类的单元素数组调用-readObjectsForClasses:options:
。那不会(并且你通常不应该)区分不同的纯文本类型。所有这些都匹配NSString
。
但是,最常见的方法是按照应用程序的首选项(通常最具表现力)来构建一个可以处理的所有类的数组,并调用{{1} }。然后处理返回的所有对象。每个对象将用于"最佳"中的粘贴板上的单个项目。可用表格。