【问题标题】:MFMessageComposeViewController iOS7 addAttachmentData:typeIdentifier:filename: not workingMFMessageComposeViewController iOS7 addAttachmentData:typeIdentifier:filename: 不工作
【发布时间】:2013-10-03 22:56:25
【问题描述】:

我想在 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 有关。

注意:我尝试了几乎所有可能的类型标识符: @"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"];

谢谢格雷格。

【问题讨论】:

  • 我得到 didAttachImage = YES 但我在显示的 SMS 屏幕中看不到任何附加图像。我正在 Iphone 6plus、iOS 8.4.1 上进行测试

标签: ios ios7 mms uti mfmessagecomposeview


【解决方案1】:

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!)

【讨论】:

  • 两个都试过了。还是行不通。 UIImage *img = [UIImage imageWithContentsOfFile:image.i_filePath]; NSData *imgData = UIImagePNGRepresentation(img); BOOL didAttachImage = [messageController addAttachmentData:imgData typeIdentifier:(NSString *)kUTTypePNG 文件名:@"image"];
  • 来吧,这太愚蠢了。将文件名更改为“image.png”,现在它可以工作了。哈哈。不敢相信。谢谢格雷格。
  • 不错。 :-) 很高兴我能帮上忙!
  • 谢谢!只是一个旁注,这也适用于视频,只需将文件命名为 video.mp4video.mov 等等。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-10
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 2013-10-14
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多