2012-09-28 21 views
8

Estoy migrando para usar UIActivityViewController para compartir en iOS6, pero no puedo encontrar la manera de crear objetos de archivos adjuntos que se incluirán cuando se comparta por correo electrónico.Adjuntar objeto utilizando iOS6 UIActivityViewController

El código correspondiente en IOS5 es:

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 
[picker addAttachmentData:data mimeType:@"application/XXX" fileName:fileName]; 

Respuesta

24

Tiene un control muy limitado sobre UIActivityViewController, pero si va a asociar tipos de mime bien conocidos, descubrí que puede hacer que funcione correctamente al proporcionar la extensión de archivo asociada en una URL de archivo. Por ejemplo, si el archivo adjunto es una tarjeta digital, utilice la extensión ".vcf" en el URL del archivo:

NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
// The file extension is important so that some mime magic happens! 
NSString *filePath = [docsPath stringByAppendingPathComponent:@"vcard.vcf"]; 
NSURL *fileUrl  = [NSURL fileURLWithPath:filePath]; 

[data writeToURL:fileUrl atomically:YES]; // save the file 

// Now pass the file URL in the activity items array 
UIActivityViewController *avc = [[UIActivityViewController alloc] initWithActivityItems: 
    @[@"Here's an attached vCard", fileUrl] applicationActivities:nil]; 
[vc presentModalViewController:avc animated:YES]; 
+0

Esto realmente funcionó, gracias markiv :) Combiné esto con otra guía sobre cómo crear archivos personalizados para una aplicación (por ejemplo, archivos usando .myApp), y conseguí que funcione también con el archivo URL. – Setomidor

+1

disculpa por mencionar esta vieja pregunta, pero no debería '[data writeToURL: filePath atómicamente: YES]' be '[data writeToURL: fileURL atically: YES]'? –

+0

@GabrielePetronella Sí o creo que [data writeToFile: filePath atómicamente: SÍ] también funcionaría. –

0

De lo que puedo decir que no se puede hacer esto con la UIActivityViewController - Ni siquiera puedo llegar a hacer que presente el contenido HTML para el cuerpo del mensaje - así que es mejor que uses SLComposeViewController.

+0

Es posible añadir contenido HTML mediante el etiquetado de la cadena que pasa en elementos de actividad con ... - sólo entonces se puede interpretar como html. – SMSidat

+0

@SMSidat ¿estás seguro? eso es exactamente lo que hice y fue traducido literalmente (es decir, no interpretado como HTML) –

+0

Estoy bastante seguro, lo he hecho y funciona. Realmente no quiero secuestrar este hilo de preguntas y respuestas, así que si ya tienes uno, me complacerá ayudarte, o puedes crear uno nuevo con una copia de la parte relevante de tu código y yo Veré lo que puedo hacer – SMSidat

2

para cualquiera que se pregunte por qué sus archivos no están siendo compartidos usando UIActivityViewController a aplicaciones como Dropbox y otro archivo genérico manejo de aplicaciones, lo que realmente desea es un UIDocumentInteractionController.

Utilice algo como esto:

class ViewController { 
    var openInController:UIDocumentInteractionController! 

    init() { 
     openInController = UIDocumentInteractionController(URL: docURL) 
    } 

    func shareDoc { 
     openInController.presentOptionsMenuFromRect(CGRectZero, inView: self.view, animated: true) 
    } 
} 
Cuestiones relacionadas