使用UTI而不是NSFileContentsPboardType将文件内容放在NSPasteboard上?

| 我有带有一些图像和文本的富文本文件。在我的Cocoa应用程序中,我试图将该文件的内容放在“ 0”上,以便用户可以将内容拖到其他应用程序(TextEdit,Mail等)中。 一个用例是:富文本文件包含电子邮件模板,用户将内容拖到新的邮件中。 我尝试了一下但没有成功:
NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
[pboard writeFileContents:filePath];
苹果文档说:   写入文件内容   文件名到接收者并声明   数据类型   NSFileContentsPboardType以及   输入适合该文件的   扩展名(由   NSCreateFileContentsPboardType   传递文件时的功能   扩展名)(如果有)。 在ClipboardViewer应用程序中,我可以看到几种数据类型,一种是
NXFileContentsPboardType
。但是,诸如Mail和TextEdit之类的应用程序不允许删除该数据类型。 当我手动将富文本内容复制到剪贴板(Ctrl + C)时,我看到了我想要的所有不同数据类型:
public.rtf
public.utf8-plain-text
NSStringPboardType
... 那么我该如何自己以编程方式做到这一点?我是否必须找出所有各种UTI类型并设置相应的数据?我以为那是六英镑的意思。 谢谢马克。 编辑: 取得进展...适用于
.rtf
个文件,但不适用于
.txt
个文件:
NSString *uti = // helper code to get UTI from NSURL resource key...
NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
[pboard declareTypes:[NSArray arrayWithObject:uti] owner:nil];
[pboard setData:[NSData dataWithContentsOfFile:filePath] forType:uti];
对于
.txt
文件,粘贴板上的数据类型为
public.text
。但是,TextEdit和Mail.app不允许删除该类型。
public.rtf
如果是富文本格式,则效果很好...     
已邀请:
似乎无法将文件内容添加到粘贴板,并且无法自动检测内容类型。 事实证明,将RTF / RTFD文件内容放在粘贴板上非常简单:
NSAttributedString *contents = [[NSAttributedString alloc] initWithPath:filePath documentAttributes:NULL];
// This sets the correct type automatically:
[pboard writeObjects:[NSArray arrayWithObject:contents]];
[contents release];
    

要回复问题请先登录注册