いくつかの画像とテキストを含むリッチテキスト ファイルがあります。私の 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
リッチテキストが正常に機能する場合...