iOS Swift 3目前MFMailComposeViewController导致崩溃

时间:2017-10-28 15:32:52

标签: ios iphone

嘿我正在使用此代码从我的应用程序中发送电子邮件

VNDetectRectanglesRequest

该应用程序是实时的,用户的电子邮件确实与我联系。它们通常是空的,除了"从我的iPhone发送"但我不认为这是一个编程问题。问题是,显然,上周, 8台设备因为" // CRASHES"而丢弃了崩溃报告。线。

我认为模拟器在尝试执行此操作时会崩溃,但我几周没有使用模拟器进行此安装,因此iTunesConnect上的崩溃报告是合法的崩溃。

如果用户没有安装电子邮件应用,会发生什么?

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以通过调用

验证用户是否设置了发送邮件的设备
[MFMailComposeViewController canSendMail]

执行任何操作之前

答案 1 :(得分:1)

根据Apple文档MFMailComposeViewController

  

在呈现邮件撰写视图控制器之前,请始终调用canSendMail()方法以查看当前设备是否配置为发送电子邮件。如果用户的设备未设置为发送电子邮件,您可以通知用户或只是禁用应用程序中的电子邮件发送功能。如果canSendMail()方法返回false,则不应尝试使用此接口。

因此,使用MFMailComposeViewController()初始化邮件撰写视图控制器将返回nil,如果用户的设备未设置为传送电子邮件,并且应用程序因为出现nil模态视图控制器而终止。

因此,在展示邮件撰写视图控制器之前,您应该检查设备的邮件设置。

所以试试这行代码

@IBAction func sendEmail(_ sender: Any) {
    if !MFMailComposeViewController.canSendMail() {
        print("Mail services are not available")
        return
    }

    let composeVC = MFMailComposeViewController()
    composeVC.mailComposeDelegate = self

    // Configure the fields of the interface.
    composeVC.setToRecipients(["test@gmail.com"])
    composeVC.setSubject("Feedback")
    composeVC.setMessageBody("", isHTML: false)

    // Present the view controller modally.
    self.present(composeVC, animated: true, completion: nil) //CRASHES
}