MFMessageComposeViewController iOS7 addAttachmentData:typeIdentifier:filename:not working

时间:2013-10-03 22:56:26

标签: ios ios7 mms uti mfmessagecomposeview

我想在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屏幕时,它无法识别图像,也无法发送。我看到这样的事情:

Message Screen

我相信这对我发送的imgData或者typeIdentifier都有用。

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

有人可以帮帮我吗?你使用的typeIdentifier是什么?我正在iPhone 5,iOS 7.0.2上进行测试。

感谢。


SOLUTION:

正如Greg所说,这解决了我的问题:将文件名设置为@“image.png”,将typeIdentifier设置为kUTTypePNG。

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

谢谢Greg。

2 个答案:

答案 0 :(得分:35)

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列表:System-Declared Uniform Type Identifiers(谢谢@iWasRobbed!)

答案 1 :(得分:0)

对于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: {

        })

}