ios ios7 mms uti mfmessagecomposeview

MFMessageComposeViewController iOS7 addAttachmentData: typeIdentifier: filename: no funciona



mms uti (2)

Quiero adjuntar una imagen a un MMS, en iOS7. Escribí el siguiente código:

MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init]; messageController.messageComposeDelegate = self; NSData *imgData = [NSData dataWithContentsOfFile:@"blablabla"]; BOOL didAttachImage = [messageController addAttachmentData:imgData typeIdentifier:@"public.data" filename:@"image"]; if (didAttachImage) { // Present message view controller on screen [self presentViewController:messageController animated:YES completion:nil]; } else { UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Failed to attach image" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [warningAlert show]; return; }

El problema es que cuando se presenta la pantalla de SMS, no reconoce la imagen y no puede enviarla. Veo algo como esto:

Creo que esto tiene algo que ver con imgData que estoy enviando o con typeIdentifier.

Nota: Probé casi todos los identificadores de tipo posibles: @ "public.data", @ "public.image", @ "public.item", ... etc. Ninguno funcionó.

¿Alguien por favor me puede ayudar? ¿Cuál es el tipo de identificador que está utilizando? Estoy probando en iPhone 5, iOS 7.0.2.

Gracias.

SOLUCIÓN:

Como Greg indicó, esto resolvió mi problema: establecer el nombre de archivo como @ "image.png", y typeIdentifier en kUTTypePNG.

[messageController addAttachmentData:imgData typeIdentifier:(NSString *)kUTTypePNG filename:@"image.png"];

Gracias greg


El MFMessageComposeViewController desea que el archivo adjunto tenga la extensión correcta para el tipo de imagen que está cargando. Lo verifiqué probando con un archivo PNG y con las siguientes variaciones al agregar los datos adjuntos:

[messageController addAttachmentData:imgData typeIdentifier:@"public.data" filename:@"image"]; [messageController addAttachmentData:imgData typeIdentifier:@"public.data" filename:@"image.abc"]; [messageController addAttachmentData:imgData typeIdentifier:@"public.data" filename:@"image.png"];

Sólo la última opción funcionó. No tuve que cambiar el TypeIdentifier, aunque probablemente tendría sentido elegir una UTI que coincida con el tipo de datos.

La lista completa de UTI está disponible aquí: Identificadores de tipo uniforme declarados por el sistema (¡Gracias, @iWasRobbed!)


Para Swift puedes probar esto

if (MFMessageComposeViewController.canSendText ()) {

let controller = MFMessageComposeViewController() controller.body = "Solution for broken image in composer" controller.messageComposeDelegate = self if image.imageAsset != nil { let imageData = UIImageJPEGRepresentation(self.fixOrientation(img: image), 1) //! as NSData controller.addAttachmentData(imageData! , typeIdentifier: "image/.jpeg", filename: "image.jpeg") } viewController.present(controller, animated: true,completion: { })

}