web-dev-qa-db-fra.com

ios: l'application a tenté de présenter un contrôleur de vue modale nul sur la cible

Je suis en train de développer une application, l'exigence est d'ouvrir le courrier électronique composer sur un clic de bouton de UIAlertView.

le message qui se trouve dans le corps du message de l'e-mail est copié depuis UITextView. j'utilise l'extrait de code suivant:

-(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];
}

mais le problème est que je reçois une erreur disant que l'application a essayé de présenter un contrôleur de vue modale nul sur la cible. comment ouvrir le courrier par défaut composer dans ios 7?

32

Selon Apple, vous devez vérifier si MFMailComposeViewController sont en mesure d'envoyer votre courrier juste avant l'envoi

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

Réf: RL de développement Apple


73
Toseef Khilji

Oublier la configuration du compte de messagerie dans les paramètres de l'appareil peut également entraîner cette erreur. Vérifiez à nouveau si un compte de messagerie est configuré sur votre appareil ou non.

10
prodeveloper

Version Swift 4

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