21

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 画面が表示されたときに画像を認識せず、送信できないことです。私はこのようなものを見ます:

メッセージ画面

これは、送信している 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"];

ありがとうグレッグ。

4

2 に答える 2

37

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 (Thanks @iWasRobbed!)

于 2013-10-03T22:59:31.040 に答える