【发布时间】:2014-07-13 13:49:23
【问题描述】:
我正在使用 NSPasteboard 从中读取数据并使用接收到的数据执行操作。
具体来说,我对以下按优先顺序列出的类型的信息感兴趣。
- 文件路径
- 文本数据
- 图像数据(这不是复制图像文件,而是图像的实际部分,例如,当您在编辑器中打开图像时,进行选择并按 command+v)
这就是我的代码
_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 包含一些数据,然后我将其写入另一个文件,并且可以看到只有选定的药水被复制了,所以也可以。另外,我知道当我将图像“文件”复制到剪贴板时,imageData 也不会为零,但这没关系,因为最重要的是文件 URL,这就是需要做的事情。
我遇到的问题是与从粘贴板读取文本相关的行。
NSString *text = [_pasteBoard propertyListForType: NSStringPboardType];
NSString *text2 = [_pasteBoard propertyListForType: NSPasteboardTypeString];
NSString *rtfText = [_pasteBoard propertyListForType: NSRTFPboardType];
问题描述:
我复制了此页面的 URL,“text”和“text2”都包含粘贴板中的字符串。所以这里很好:)
我从 TextEdit 中打开的 .cs 代码文件中复制了一些行,剪贴板显示我有“public.utf8-plain-text”和“NSStringPboardType”,但“text”和“text2”都是 nil ;
从同一个 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 数据可以包含比文本更多的内容,但我只关心在字符串文件中获取文本。
任何帮助将不胜感激。
谢谢!
【问题讨论】:
-
您如何检查结果?你在登录吗?还是您正在调试会话中检查变量?
-
我正在使用 Apples 免费提供的示例中的 [_pasteBoard types] 和剪贴板查看器。
-
您是说剪贴板查看器对字符串和文本类型一无所获?我要问的是你如何确定你的
text和text2变量是nil?您是否使用NSLog()记录它们?在调试器中检查它们?还有什么? -
我检查了调试器中的变量,然后有一些永远不会执行的 IF 语句(if(text))。
-
当你在调试器中时,你确定你没有做任何会改变粘贴板所有者和内容的复制吗?您是否在不涉及调试器的情况下进行了测试?
标签: objective-c cocoa osx-mountain-lion osx-mavericks nspasteboard