我的应用程序中有以下代码可以发送电子邮件:
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解雇,我做错了什么?
答案 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应该检查代理是否响应了正确的方法,因此不应该调用它们,因为它不匹配。