MFMailComposeViewController делегат не работает на Swift 4 - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь отклонить 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)

        }

    }
}

Заранее большое спасибо.

1 Ответ

1 голос
/ 12 марта 2019

Ваша проблема вызвана помещением метода делегата в другой метод.Вы не можете сделать это.Функции делегата должны быть на верхнем уровне класса.Просто переместите вашу функцию mailComposeController(_:didFinishWith:error:) из функции uploadPressed.

...