MFMessageComposeViewController iOS7 addAttachmentData:typeIdentifier: имя файла: не работает
Я хочу прикрепить изображение к MMS на 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;
}
Проблема в том, что при отображении экрана SMS он не распознает изображение и не может отправить его. Я вижу что-то вроде этого:
Я считаю, что это как-то связано с отправкой imgData или с typeIdentifier.
Примечание: я перепробовал почти все возможные typeIdentifiers: @"public.data", @"public.image", @"public.item", ... и т. Д. Ни один не работал.
Кто-нибудь может мне помочь? Какой тип идентификатора вы используете? Я тестирую на iPhone 5, iOS 7.0.2.
Благодарю.
РЕШЕНИЕ:
Как и указывал Грег, это решило мою проблему: установите имя файла как @"image.png", а typeIdentifier в kUTTypePNG.
[messageController addAttachmentData:imgData typeIdentifier:(NSString *)kUTTypePNG filename:@"image.png"];
Спасибо Грег.
2 ответа
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 доступен здесь: Системные объявленные унифицированные идентификаторы типов (спасибо @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: {
})
}