2011-05-17 2 views
0

У меня есть текстовый файл с несколькими изображениями и текстом. В моем приложении 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 в случае насыщенного текста прекрасно работает ...

ответ

1

Похоже, что невозможно добавить содержимое файла в картотеку и автоматически определить типы содержимого.

Оказывается, помещая содержимое файла RTF/RTFD на монтажном столе так просто, как:

NSAttributedString *contents = [[NSAttributedString alloc] initWithPath:filePath documentAttributes:NULL]; 
// This sets the correct type automatically: 
[pboard writeObjects:[NSArray arrayWithObject:contents]]; 
[contents release]; 

 Смежные вопросы

  • Нет связанных вопросов^_^