使用UTI将文件的内容放入NSPasteboard而非NSFileContentsPboardType?
我有几个图像和文本的富文本文件。在我的Cocoa应用程序中,我试图将该文件的内容放在NSDragPboard
上,以便用户可以将的内容拖入其他应用程序(TextEdit,Mail等)。使用UTI将文件的内容放入NSPasteboard而非NSFileContentsPboardType?
一个用例是这样的:富文本文件包含一个电子邮件模板,用户将内容拖入一个新的邮件消息。
我想这没有成功:
NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
[pboard writeFileContents:filePath];
苹果的文档说这个:
写入文件 filename的内容到接收器,并宣布 数据为类型 NSFileContentsPboardType以及 类型适合文件的 扩展名(as如果它有一个,则由 由NSCreateFileContentsPboardType 函数在传递文件 扩展时返回)。
在ClipboardViewer应用程序中,我可以看到几种数据类型,一种是NXFileContentsPboardType
。但是,Mail和TextEdit等应用不允许删除该数据类型。
当我复制的手(控制+ C),我看到所有我想要的不同的数据类型的富文本内容复制到剪贴板:
public.rtf
public.utf8-plain-text
NSStringPboardType
- ...
那么我该如何以编程方式自己做这件事?我是否必须找出所有各种UTI类型并设置相应的数据?我认为这就是[pboard writeFileContents:path]
是...
谢谢,马克。
编辑:
取得进展......这适用于.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];