Метод MFMailComposeViewControllerDelegate не вызывается после миграции Swift 3.0

В моем приложении есть функция создания электронной почты, и оно отлично работает на Swift 2.2. Недавно я перенес код на Swift 3.0 и застрял с этой проблемой. Делюсь своим фрагментом кода ниже:

import MessageUI

class ViewController: UIViewController,     MFMailComposeViewControllerDelegate {
 func sendEmail() {
    if MFMailComposeViewController.canSendMail() {
      let mail = MFMailComposeViewController()
      mail.mailComposeDelegate = self
      mail.setToRecipients(["[email protected]"])
      mail.setSubject("Sending you an in-app e-mail...")
      mail.setMessageBody("<p>You're so awesome!</p>", isHTML: true)
      self.present(mail, animated: true)
    } else {
        //  handle failure
    }
  }

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

    controller.dismiss(animated: true)
  }

 @IBAction func mailClicked(_ sender: AnyObject) {    
    sendEmail()
  }
 }

Я установил для mailComposeDelegate значение self, поставил _ в методе делегата и попробовал все решения, найденные при поиске. Но решить вопрос не смог.

Любая помощь приветствуется.


person RVJ    schedule 26.10.2016    source источник


Ответы (1)


Это известная проблема в Xcode 8. У меня сработало следующее обходное решение:

@objc(mailComposeController:didFinishWithResult:error:)
  func mailComposeController(_ controller: MFMailComposeViewController,  didFinishWith result: MFMailComposeResult, error: NSError?) {
 controller.dismiss(animated: true, completion: nil)
}
person RVJ    schedule 26.10.2016
comment
Аналогичное решение для Swift: stackoverflow.com/a/39623586/1473527 - person Matt Bearson; 03.01.2017