У меня есть текстовый файл с несколькими изображениями и текстом. В моем приложении Какао я пытаюсь поместить содержимое этого файла в NSDragPboard
, чтобы пользователь мог перетащить содержимое в другие приложения (TextEdit, Mail и т. Д.).
Один из вариантов использования: файл с форматированным текстом содержит шаблон электронной почты, а пользователь перетаскивает содержимое в новое почтовое сообщение.
Я попробовал это безуспешно:
NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
[pboard writeFileContents:filePath];
Документы Apple говорят так:
Записывает содержимое файла
имя файла для получателя и объявляет
данные должны быть типа
NSFileContentsPboardType , а также
тип подходит для файла
расширение (как возвращено
NSCreateFileContentsPboardType
функция при передаче файлов
расширение), если оно есть.
В приложении ClipboardViewer я вижу несколько типов данных, один из которых NXFileContentsPboardType
. Однако такие приложения, как Mail и TextEdit, не позволяют отбрасывать этот тип данных.
Когда я вручную копирую форматированный текст в буфер обмена (Control + C), я вижу все нужные мне типы данных:
public.rtf
public.utf8-plain-text
NSStringPboardType
- ...
Так как я могу сделать это программно сам? Должен ли я выяснить все различные типы UTI и установить соответствующие данные? Я думал, что это то, что [pboard writeFileContents:path]
было для ...
Спасибо, Марк.
EDIT:
Добиться прогресса ... Это работает для .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
в случае форматированного текста работает нормально ...