MFMailComposeViewController不会被忽略

时间:2018-01-09 13:02:31

标签: ios swift4 mfmailcomposeviewcontroller

我的应用程序中有以下代码可以发送电子邮件:

let ToRecipents = ["recipient here"]
        let subject = "subject here"
        let MessageBody = "message here"

        let mc : MFMailComposeViewController = MFMailComposeViewController()

        mc.mailComposeDelegate = self


        mc.setToRecipients(ToRecipents)
        mc.setSubject(subject)
        mc.setMessageBody(MessageBody, isHTML: false)

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

    }

    func mailComposeController(_ controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) {

        controller.dismiss(animated: true, completion: nil)

    }

我似乎无法让MFMailComposeViewController解雇,我做错了什么?

1 个答案:

答案 0 :(得分:3)

通常不调用委托方法时:
•检查代理是否已设置。您可以使用mc.mailComposeDelegate = self正确执行此操作 •检查您设置的委托方法是否符合协议 •检查作为委托传递的对象中是否正确实现了委托方法(这是您的问题所在)。阅读文档,或删除方法声明,让编译器/ IDE / XCode为您自动完成它。在各种教程之间的Swift中,它们经常出现问题,因为Swift 1,Swift 2,Swift 3/4已经重命名了方法并导致了问题,教程只关注Swift版本。

你的方法:

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?)

来自documentation的方法:

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

由于它们不相同,并且iOS SDK应该检查代理是否响应了正确的方法,因此不应该调用它们,因为它不匹配。