Je souhaite joindre une image à un MMS, sur iOS7. J'ai écrit le code suivant:
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;
}
Le problème est que lorsque l'écran SMS est présenté, il ne reconnaît pas l'image et ne peut pas l'envoyer. Je vois quelque chose comme ça:
Je pense que cela a quelque chose à voir avec imgData que j'envoie ou avec typeIdentifier.
Note: J'ai essayé presque tous les identificateurs de type possibles: @ "Public.data", @ "public.image", @ "public.item", ... etc. Aucun n'a fonctionné.
Quelqu'un peut-il m'aider s'il vous plaît? Quel est le typeIdentifier que vous utilisez? Je teste sur iPhone 5, iOS 7.0.2.
Merci.
SOLUTION:
Comme Greg l’a indiqué, cela a résolu mon problème: définir le nom de fichier comme étant "" image.png "et le typeIdentifier comme étant kUTTypePNG.
[messageController addAttachmentData:imgData typeIdentifier:(NSString *)kUTTypePNG filename:@"image.png"];
Merci Greg.
MFMessageComposeViewController souhaite que la pièce jointe porte l'extension appropriée pour le type d'image que vous téléchargez. J'ai vérifié en testant avec un fichier PNG et les variantes suivantes de l'ajout des données de pièce jointe:
[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"];
Seule la dernière option a fonctionné. Je n'ai pas eu besoin de changer le typeIdentifier, même s'il serait probablement logique de choisir une UTI qui correspond au type de données.
La liste complète des UTI est disponible ici: Identificateurs de type uniforme déclarés par le système (Merci @iWasRobbed!)
Pour Swift, vous pouvez essayer ceci
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: {
})
}