0

いくつかの画像とテキストを含むリッチテキスト ファイルがあります。私の Cocoa アプリでは、そのファイルの内容をユーザーが他のアプリケーション (TextEdit、Mail など) にドラッグできるように、そのファイルの内容を配置しようとしてますNSDragPboard

1 つの使用例は次のとおりです。リッチテキスト ファイルに電子メール テンプレートが含まれており、ユーザーがコンテンツを新しいメール メッセージにドラッグします。

私は成功せずにこれを試しました:

NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
[pboard writeFileContents:filePath];

Apple のドキュメントには次のように書かれています。

ファイル filename の内容をレシーバーに書き込み、データが NSFileContentsPboardType型であり、ファイルの拡張子 (ファイル拡張子が渡されたときに NSCreateFileContentsPboardType 関数によって返される) に適した型であると宣言します。

ClipboardViewer アプリでは、いくつかのデータ型を確認できますNXFileContentsPboardType。ただし、Mail や TextEdit などのアプリでは、そのデータ型を削除できません。

リッチテキスト コンテンツを手動でクリップボードにコピーすると (Control + 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リッチテキストが正常に機能する場合...

4

1 に答える 1

1

ファイルの内容をペーストボードに追加して、内容の種類を自動的に検出することはできないようです。

RTF / RTFDファイルの内容をペーストボードに配置するのは、次のように簡単です。

NSAttributedString *contents = [[NSAttributedString alloc] initWithPath:filePath documentAttributes:NULL];
// This sets the correct type automatically:
[pboard writeObjects:[NSArray arrayWithObject:contents]];
[contents release];
于 2011-05-20T07:22:54.990 に答える