MFMessageComposeViewController iOS7 addAttachmentData:typeIdentifier:文件名:不工作

我想在iOS7上将图像附加到彩信上。 我写了下面的代码:

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

问题是当出现短信屏幕时,它不能识别图像,也不能发送。 我看到这样的事情:

消息屏幕

我相信这与我发送的imgData或typeIdentifier有关。

注意:我尝试了几乎所有可能的typeIdentifiers:@“public.data”,@“public.image”,@“public.item”等…无效。

任何人都可以帮我吗? 什么是你正在使用的types标识符? 我正在testingiPhone 5,iOS 7.0.2。

谢谢。


解:

按照Greg的指示,这解决了我的问题:将文件名设置为@“image.png”,并将typeIdentifier设置为kUTTypePNG。

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

感谢Greg。

MFMessageComposeViewController希望附件具有正在上传的图像types的正确扩展名。 我通过使用PNG文件进行testing进行validation,以及添加附件数据的以下变化forms:

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

只有最后一个选项的工作。 我不需要改变typeIdentifier,尽pipeselect一个与数据types相匹配的UTI可能是有意义的。

系统声明的统一types标识符 (谢谢@iWasRobbed!)

对于Swift你可以试试这个

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: { }) 

}