Ios MFMailComposeViewController委托未在swift 4上工作

Ios MFMailComposeViewController委托未在swift 4上工作,ios,swift,delegates,mfmailcomposeviewcontroller,Ios,Swift,Delegates,Mfmailcomposeviewcontroller,我试图关闭MFMailComposeViewController,但未触发委托。这似乎是一个常见的问题,答案是相同的,但它们对我不起作用:(.我有一个按钮,可以调用函数来发送邮件。我首先创建一个csv文件,然后使用MFMailComposeViewController并将csv文件附加到邮件中。邮件有时会发送(邮件视图控制器在此之后不会关闭)“取消”按钮向我显示了删除或保存草稿的选项,但在此之后,什么也不会发生 以下是按钮的代码: import UIKit import MessageUI c

我试图关闭MFMailComposeViewController,但未触发委托。这似乎是一个常见的问题,答案是相同的,但它们对我不起作用:(.我有一个按钮,可以调用函数来发送邮件。我首先创建一个csv文件,然后使用MFMailComposeViewController并将csv文件附加到邮件中。邮件有时会发送(邮件视图控制器在此之后不会关闭)“取消”按钮向我显示了删除或保存草稿的选项,但在此之后,什么也不会发生

以下是按钮的代码:

import UIKit
import MessageUI

class UserInfoViewController: UIViewController, MFMailComposeViewControllerDelegate {

@IBAction func uploadPressed(_ sender: Any) {

        let contentsOfFile = "Name,ID,Age,Sex,Time,\n\(name),\(id),\(age),\(sex),\(time)"

        let data = contentsOfFile.data(using: String.Encoding.utf8, allowLossyConversion: false)

        if let content = data {
            print("NSData: \(content)")
        }

        func configuredMailComposeViewController() -> MFMailComposeViewController {

            let emailController = MFMailComposeViewController()

            //emailController.mailComposeDelegate = self as? MFMailComposeViewControllerDelegate
            emailController.mailComposeDelegate = self
            emailController.setToRecipients([""])
            emailController.setSubject("CSV File")
            emailController.setMessageBody("", isHTML: false)

            emailController.addAttachmentData(data!, mimeType: "text/csv", fileName: "registro.csv")

            return emailController

        }

        let emailViewController = configuredMailComposeViewController()

        if MFMailComposeViewController.canSendMail() {

            self.present(emailViewController, animated: true, completion: nil)

        }

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

            print("Delegate worked!")
            controller.dismiss(animated: true, completion: nil)

        }

    }
}

非常感谢您。

您的问题是由于将委托方法放在另一个方法中引起的。您不能这样做。委托函数需要位于类的顶层。只需将您的
MailComposecController(uu2;:didFinishWith:error:)
函数移出
uploadPressed
函数即可