39

我正在开发一个应用程序,要求是在 UIAlertView 的按钮单击上打开电子邮件编写器。

电子邮件消息正文中的消息是从 UITextView 复制的。我正在使用以下代码片段:

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

但问题是我收到错误消息说应用程序试图在目标上呈现一个 nil 模态视图控制器。我们如何在 ios 7 中打开默认邮件编辑器?

4

3 回答 3

85

根据 Apple,您应该检查MFMailComposeViewController是否能够在发送之前发送您的邮件

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

迅速:

if MFMailComposeViewController.canSendMail() else {
// Send mail code
}

参考:苹果开发网址


于 2013-10-08T04:29:08.713 回答
17

斯威夫特 4 版本

guard MFMailComposeViewController.canSendMail() else {
    print("Mail services are not available")
    return
}
sendEmail()
于 2018-05-04T11:22:30.273 回答
11

在设备设置中忘记邮件帐户配置也可能导致此错误。重新检查您的设备中是否配置了邮件帐户。

于 2014-04-24T11:46:43.050 回答