Pregunta

Me han enriquecido archivo de texto con un par de imágenes y texto.En mi Cacao aplicación que estoy tratando de poner el contenido de ese archivo en el NSDragPboard de modo que el usuario puede arrastrar la contenido en otras aplicaciones (TextEdit, Correo, etc.).

Un caso de uso es este:el rico archivo de texto contiene una plantilla de correo electrónico y el usuario arrastra el contenido en un nuevo mensaje de Correo.

Lo probé sin éxito:

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

El Apple docs decir esto:

Escribe el contenido del archivo nombre de archivo para el receptor y declara los datos de tipo NSFileContentsPboardType y también de un el tipo apropiado para el archivo la extensión (como el devuelto por la NSCreateFileContentsPboardType función cuando se pasa los archivos la extensión), si tiene uno.

En el ClipboardViewer app puedo ver un par de tipos de datos, uno de los cuales NXFileContentsPboardType.Sin embargo, las aplicaciones de Correo electrónico y TextEdit no permiten soltar ese tipo de datos.

Cuando copio el rico contenido de texto en el portapapeles con la mano (Control+C), veo a todos los diferentes tipos de datos que quiero:

  • public.rtf
  • public.utf8-plain-text
  • NSStringPboardType
  • ...

Entonces, ¿cómo puedo hacer que mediante programación a mí mismo?¿Tengo que entender todos los diferentes tipos UTI y establecer la función de los datos?Pensé que es lo que [pboard writeFileContents:path] fue para...

Gracias, Marcos.

EDITAR:

Progresando...Esto funciona para .rtf los archivos, pero no para .txt archivos:

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];

Para .txt los archivos del tipo de datos en la mesa de trabajo es public.text.Sin embargo, la edición de textos y Correo electrónico.la aplicación no permite dejar de lado ese tipo. public.rtf en el caso de texto enriquecido funciona bien...

¿Fue útil?

Solución

Parece que no es posible añadir el contenido del archivo a la mesa de trabajo y tener los tipos de contenido que se puede detectar automáticamente.

Resulta que al poner RTF/RTFD contenido del archivo en la mesa de trabajo es tan simple como:

NSAttributedString *contents = [[NSAttributedString alloc] initWithPath:filePath documentAttributes:NULL];
// This sets the correct type automatically:
[pboard writeObjects:[NSArray arrayWithObject:contents]];
[contents release];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top