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は何ですか?私はiPhone5、iOS7.0.2でテストしています。
ありがとう。
解決策:
グレッグが指示したように、これは私の問題を解決しました:ファイル名を@ "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の完全なリストは、次の場所にあります。 システム宣言のUniform Type Identifiers (@ 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: {
})
}