![](/img/trans.png)
[英]MFMessageComposeViewController addAttachmentData on iPad iOS7 black screen
[英]MFMessageComposeViewController iOS7 addAttachmentData:typeIdentifier:filename: not working
我想在 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;
}
问题是当SMS屏幕出现时,它无法识别图像,也无法发送。 我看到这样的事情:
我相信这与我发送的 imgData 或 typeIdentifier 有关。
注意:我尝试了几乎所有可能的 typeIdentifiers:@"public.data", @"public.image", @"public.item", ... 等等。都没有。
有人可以帮我吗? 您使用的 typeIdentifier 是什么? 我正在 iPhone 5、iOS 7.0.2 上进行测试。
谢谢。
解决方案:
按照 Greg 的指示,这解决了我的问题:将文件名设置为 @"image.png",并将 typeIdentifier 设置为 kUTTypePNG。
[messageController addAttachmentData:imgData typeIdentifier:(NSString *)kUTTypePNG filename:@"image.png"];
谢谢格雷格。
MFMessageComposeViewController 希望附件具有您上传的图像类型的正确扩展名。 我通过使用 PNG 文件进行测试以及添加附件数据的以下变体进行了验证:
[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,尽管选择与数据类型匹配的 UTI 可能是有意义的。
UTI 的完整列表可在此处获得: 系统声明的统一类型标识符(感谢 @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: {
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.