У меня есть текстовый файл с несколькими изображениями и текстом. В моем приложении Cocoa я пытаюсь разместить содержимое этого файла на NSDragPboard
, чтобы пользователь мог перетащить содержимое в другие приложения (TextEdit, Mail и т. Д.).Ввод содержимого файла на NSPasteboard с использованием UTI, а не NSFileContentsPboardType?
Один из них заключается в следующем: файл с богатым текстом содержит шаблон электронной почты, и пользователь перетаскивает содержимое в новое сообщение Mail.
Я попытался это без успеха:
NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
[pboard writeFileContents:filePath];
Документы Apple, говорят, это:
Записывает содержимое файла файла к приемнику и объявляет данных с типа NSFileContentsPboardType, а также типа , подходящего для расширения файла (as возвращается Функция NSCreateFileContentsPboardType при передаче файлов extension), если она есть.
В приложении ClipboardViewer я могу видеть несколько типов данных, один из которых NXFileContentsPboardType
. Однако такие приложения, как Mail и TextEdit, не позволяют удалить этот тип данных.
Когда я копирую богатых содержание текста в буфер обмена вручную (Ctrl + 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
в случае насыщенного текста прекрасно работает ...