Подтвердить что ты не робот

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 он не распознает изображение и не может его отправить. Я вижу что-то вроде этого:

Message Screen

Я считаю, что это что-то делать с imgData, которую я отправляю, или с помощью typeIdentifier.

Примечание. Я пробовал почти все возможные типы идентификаторов: @ "public.data", @ "public.image", @ "public.item",... и т.д. Не работает.

Может ли кто-нибудь помочь мне? Каков типIdentifier, который вы используете? Я тестирую iPhone 5, iOS 7.0.2.

Спасибо.


РЕШЕНИЕ:

Как сказал Грег, это решило мою проблему: задайте имя файла как @ "image.png", а typeIdentifier - kUTTypePNG.

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

Спасибо, Грег.

4b9b3361

Ответ 1

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"];

Выполнен только последний параметр. Мне не нужно было менять идентификатор типа, хотя, вероятно, было бы целесообразно выбрать UTI, который соответствует типу данных.

Полный список UTI доступен здесь: Системные декларируемые идентификаторы типов (Спасибо @iWasRobbed!)

Ответ 2

Для 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: {

        })

}