【问题标题】:MFMailComposeViewController doesn't read variable into message in SwiftMFMailComposeViewController 不会将变量读入 Swift 中的消息
【发布时间】:2020-05-07 10:34:10
【问题描述】:

我有一个小问题。我正在使用 MFMailComposeViewController 下班后发送电子邮件。所以我有 var allRuns,我在几个地方打印了那个 var,它总是显示 value = 3。但是在我的 MailViewController 到 MessageBody 中它等于 0/nil(我设置了 0)。如果它很重要 - 我正在从 Firebase 获取 var,但在应用程序的早期。我应该去哪里找问题?这是下面的一些代码。

邮件视图控制器:

import UIKit
import MessageUI

class MailViewController: UIViewController, MFMailComposeViewControllerDelegate {

let av = ActualValues()

override func viewDidLoad() {
    super.viewDidLoad()
    
}

//MARK: - Buttons

@IBAction func emailButtonTapped(_ sender: UIButton) {
    showMailComposer()
}

@IBAction func backButtonTapped(_ sender: UIButton) {
    self.dismiss(animated: true, completion: nil)
}


//MARK: -Func

func showMailComposer() {
    if MFMailComposeViewController.canSendMail() {
        let mailComposer = MFMailComposeViewController()
        mailComposer.mailComposeDelegate = self
        mailComposer.setToRecipients(["paereson@gmail.com"])
        mailComposer.setSubject("Work of \(av.currentDate())")
        mailComposer.setMessageBody("All runs: \(av.allRuns)", isHTML: false)
        
        present(mailComposer, animated: true, completion: nil)
    }
}

func mailComposeController(_ controller: MFMailComposeViewController,
                           didFinishWith result: MFMailComposeResult, error: Error?) {
    if let _ = error {
        //show alert
        controller.dismiss(animated: true, completion: nil)
        return
    }
    
    switch result {
    case .cancelled:
        print("Cancelled")
    case .failed:
        print("Failed")
    case .saved:
        print("saved")
    case .sent:
        print("Email sent")
    @unknown default:
        print("default")
    }
    controller.dismiss(animated: true, completion: nil)
    
}

}

av = ActualValuse 中的几行:

var allRuns: Int = 0
var runs: Array? = []

//All runs
func allRunsFunc() {
    let ref1 = ref.child("\(currentYear())/\(currentMonth())/\(currentDay())")
    ref1.observeSingleEvent(of: .value) { (snapshot) in
        if let snapshots = snapshot.children.allObjects as? [DataSnapshot] {
            self.allRuns = snapshots.count as Int
        }
    }
}

编辑: 我应该在 MFMAilComposeViewController 之前使用 segue 吗?如果是,我应该如何配置它?

import UIKit
import MessageUI

class MailViewController: UIViewController, MFMailComposeViewControllerDelegate {

let av = ActualValues()


override func viewDidLoad() {
    super.viewDidLoad()
    
}

//MARK: - Buttons

@IBAction func emailButtonTapped(_ sender: UIButton) {
    showMailComposer()
}

@IBAction func backButtonTapped(_ sender: UIButton) {
    self.dismiss(animated: true, completion: nil)
}


//MARK: -Func


func showMailComposer() {
    if MFMailComposeViewController.canSendMail() {
        let mailComposer = MFMailComposeViewController()
        mailComposer.mailComposeDelegate = self
        mailComposer.setToRecipients(["paereson@gmail.com"])
        mailComposer.setSubject("Work of \(av.currentDate())")
        mailComposer.setMessageBody("\(av.exportText())", isHTML: true)
        
        present(mailComposer, animated: true, completion: nil)
    }
}

func mailComposeController(_ controller: MFMailComposeViewController,
                           didFinishWith result: MFMailComposeResult, error: Error?) {
    if let _ = error {
        //show alert
        controller.dismiss(animated: true, completion: nil)
        return
    }
    
    switch result {
    case .cancelled:
        print("Cancelled")
    case .failed:
        print("Failed")
    case .saved:
        print("saved")
    case .sent:
        print("Email sent")
    @unknown default:
        print("default")
    }
    controller.dismiss(animated: true, completion: nil)
    
}

func configureMail(model: ActualValues) {
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.destination is MFMailComposeViewController {
    let vc = segue.destination as? MFMailComposeViewController
        vc?.configureMail(model: av)
    }
}
}

【问题讨论】:

  • “我正在从 Firebase 获取 var,但在应用程序的早期”:我猜测是异步问题或实例问题。 let av = ActualValues(),这是创建一个新实例(与您可能调用的另一个实例无关)。所以它可能是另一个具有allRuns 值的,而不是那个。如果没有,请在调用 self.allRuns = snapshots.count as Int 时打印,您将看到异步问题。
  • 我应该使用segue吗?请参阅“编辑”。

标签: ios swift firebase mfmailcomposeviewcontroller


【解决方案1】:

您似乎错过了allRunsFunc 函数的执行。也许在 ActualValue init 方法中调用它。

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 2021-10-25
    • 2014-08-10
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2019-07-10
    相关资源
    最近更新 更多