web-dev-qa-db-ja.com

MFMessageComposeViewController iOS7 addAttachmentData:typeIdentifier:filename:機能していません

IOS7でMMSに画像を添付したい。私は次のコードを書きました:

    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は何ですか?私はiPhone5、iOS7.0.2でテストしています。

ありがとう。


解決策:

グレッグが指示したように、これは私の問題を解決しました:ファイル名を@ "image.png"として設定し、typeIdentifierをkUTTypePNGに設定します。

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

グレッグに感謝します。

19
Beny Boariu

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の完全なリストは、次の場所にあります。 システム宣言のUniform Type Identifiers (@ iWasRobbedに感謝します!)

35
Greg

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

        })

}

0
GaganDeep Singh