Ios MFMailComposeViewController赢得';关不上

Ios MFMailComposeViewController赢得';关不上,ios,iphone,swift,Ios,Iphone,Swift,我创建了一个发送预填充电子邮件的应用程序。电子邮件将完美发送,但邮件生成器不会关闭。下面是我的代码。感谢您的帮助 @IBAction func sendEmail(_ sender: Any) { let mailComposeViewController = configuredMailComposeViewController() if MFMailComposeViewController.canSendMail() { self.present(mailC

我创建了一个发送预填充电子邮件的应用程序。电子邮件将完美发送,但邮件生成器不会关闭。下面是我的代码。感谢您的帮助

@IBAction func sendEmail(_ sender: Any)
{
    let mailComposeViewController = configuredMailComposeViewController()
    if MFMailComposeViewController.canSendMail() {
        self.present(mailComposeViewController, animated: true, completion: nil)
    } else {
        self.showSendMailErrorAlert()
    }
}

func configuredMailComposeViewController() -> MFMailComposeViewController {     
    let subject = "subject"
    let body = "body"

    let composeVC = MFMailComposeViewController()
    composeVC.mailComposeDelegate = self

    // Configure the fields of the interface.
    composeVC.setToRecipients(["example@example.com"])
    composeVC.setSubject(subject)
    composeVC.setMessageBody(body, isHTML: false)

    return composeVC
}
func showSendMailErrorAlert() {
    let sendMailErrorAlert = UIAlertView(title: "Could Not Send Email", message: "Your device could not send e-mail.  Please check e-mail configuration and try again.", delegate: self, cancelButtonTitle: "OK")
    sendMailErrorAlert.show()
}

// MARK: MFMailComposeViewControllerDelegate Method
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {

    switch result {
    case .cancelled:
        break
    case .saved:
        break
    case .sent:
        break
    case .failed:
        break
    }

    controller.dismiss(animated: true, completion: nil)
}
我在这里找到了多种建议,但似乎没有任何效果。

您的问题在于:

func configuredMailComposeViewController() -> MFMailComposeViewController {     
    let subject = "subject"
    let body = "body"

    let composeVC = MFMailComposeViewController()
    composeVC.mailComposeDelegate = self
    ....
}
您的
MFMailComposeViewController
位于
configureMainComposeViewController
函数中,一旦终止,它将超出范围。这意味着你的代表也离开了


将您的composeVC变量设置为实例变量,您应该不会有问题。

不相关,但您应该在
if
语句中调用
configuredMailComposeViewController
。如果无法发送电子邮件,为什么要创建它?添加一个断点以确保调用的是controller.Discouse(动画:true,完成:nil)。