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