我正在做一个允许用户发送邮件的屏幕。我为它写了一些代码,它工作正常:
import UIKit
import MessageUI
class ViewController: UIViewController, MFMailComposeViewControllerDelegate {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let mailComposer = MFMailComposeViewController()
mailComposer.mailComposeDelegate = self
let recipients = ["fresher40@gmail.com"]
mailComposer.setToRecipients(recipients)
mailComposer.setSubject("Title")
mailComposer.setMessageBody("Hello", isHTML: false)
if MFMailComposeViewController.canSendMail() {
self.present(mailComposer, animated: true, completion: nil)
}
}
func mailComposeController(
_ controller: MFMailComposeViewController,
didFinishWith result: MFMailComposeResult,
error: Error?
) {
controller.dismiss(animated: true, completion: nil)
}
}
然后我尝试将邮件发送功能移到另一个名为“MailSender”的类中。所以它看起来像:
import UIKit
import MessageUI
class MailSender: NSObject, MFMailComposeViewControllerDelegate {
private var mailComposer = MFMailComposeViewController()
init(email: String) {
super.init()
mailComposer.mailComposeDelegate = self
let recipients = [email]
mailComposer.setToRecipients(recipients)
mailComposer.setSubject("Title")
mailComposer.setMessageBody("Hello", isHTML: false)
}
func presentOverViewController(viewController: UIViewController) {
if MFMailComposeViewController.canSendMail() {
viewController.present(mailComposer, animated: true, completion: nil)
}
}
func mailComposeController(
_ controller: MFMailComposeViewController,
didFinishWith result: MFMailComposeResult,
error: Error?
) {
controller.dismiss(animated: true, completion: nil)
}
}
我的视图控制器看起来是这样的:
import UIKit
import MessageUI
class ViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let mailSender = MailSender(email: "someEmail@gmail.com")
mailSender.presentOverViewController(viewController: self)
}
}
在这种情况下,屏幕会打开发送邮件视图,但在取消点击按钮后应用程序崩溃。我究竟做错了什么?