ios7 mfmailcomposeviewcontroller

ios7 - ios: la aplicación intentó presentar un controlador de vista modal nula en el destino



mfmailcomposeviewcontroller (3)

Estoy desarrollando una aplicación, el requisito es abrir el editor de correo electrónico con un clic en el botón de UIAlertView.

El mensaje que está en el cuerpo del mensaje del correo electrónico se copia desde UITextView. Estoy usando el siguiente código snipt:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ if (buttonIndex == 0) { // opening message composer } else { MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; picker.mailComposeDelegate = self; [picker setSubject:@"Test mail"]; [picker setMessageBody:messageBody.text isHTML:YES]; [self presentViewController:picker animated:YES completion:NULL]; } } // mail compose delegate - (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error { [self dismissViewControllerAnimated:YES completion:NULL]; }

pero el problema es que recibo un error que dice que la aplicación intentó presentar un controlador de vista modal nula en el destino. ¿Cómo podemos abrir el compositor de correo predeterminado en iOS 7?


Olvidar la configuración de la cuenta de correo en la configuración del dispositivo también puede provocar este error. Verifique si una cuenta de correo está configurada en su dispositivo o no.


Según Apple, debe verificar si MFMailComposeViewController puede enviar su correo justo antes de enviar

if ([MFMailComposeViewController canSendMail]) { MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; picker.mailComposeDelegate = self; [picker setSubject:@"Test mail"]; [picker setMessageBody:messageBody.text isHTML:YES]; [self presentViewController:picker animated:YES completion:NULL]; }

Ref: Apple Dev url


Versión Swift 4

guard MFMailComposeViewController.canSendMail() else { print("Mail services are not available") return } sendEmail()