MFMessageComposeViewController iOS7 addAttachmentData: typeIdentifier: nazwa pliku: nie działa
Chcę dołączyć obraz do MMS, na iOS7. Napisałem następujący kod:
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;
}
Problem polega na tym, że gdy ekran SMS jest wyświetlany, nie rozpoznaje obrazu i nie może go wysłać. Widzę coś takiego:
Uważam, że ma to coś wspólnego z imgData, którą wysyłam, lub z typeIdentifier.
Uwaga: próbowałem prawie wszystkich możliwych typów: @ "public.data", @ " public.image", @ " public.pozycji",... itd. Brak zadziałało.
Czy ktoś może mi pomóc? Co to jest typeIdentifier używasz? Testuję na iPhone 5, iOS 7.0.2. Dzięki.Rozwiązanie:
Zgodnie z instrukcją Grega, to rozwiązało mój problem: ustaw nazwę pliku jako @ " image.png", i typeIdentifier do kUTTypePNG.
[messageController addAttachmentData:imgData typeIdentifier:(NSString *)kUTTypePNG filename:@"image.png"];
Dzięki Greg. 2 answers
MFMessageComposeViewController chce, aby załącznik miał odpowiednie rozszerzenie dla typu przesyłanego obrazu. Zweryfikowałem testując plik PNG i następujące odmiany dodawania danych załącznika:
[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"];
Zadziałała tylko ostatnia opcja. Nie musiałem zmieniać typeIdentifier, chociaż prawdopodobnie sensownym byłoby wybranie UTI pasującego do typu danych.
Pełna lista UTIs dostępna jest tutaj: System-Declared Uniform Type Identyfikatory (dzięki @ iWasRobbed!)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-03 23:13:49
Dla Swift możesz spróbować tego
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: {
})
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-13 16:21:03