1

我将我的应用程序提交到应用程序商店,但他们拒绝了它,说当他们单击反馈按钮时应用程序崩溃了,该按钮是一个打开 MFMailComposeViewController 的按钮。我遇到的问题是我已经在模拟器和实际设备之间的许多设备上运行它,但我从来没有遇到过这个问题。我将在下面发布我调用的反馈按钮的功能,并且都连接到该按钮(就像我说每次我测试它时它都工作得很好),我的问题是:我在代码中做错了什么到哪里只有他们得到崩溃?

func giveFeedback()
{
    let email = ["info@website.com"]
    var fvc = view?.window?.rootViewController
    var cev = MFMailComposeViewController()
    cev.mailComposeDelegate = self
    cev.setToRecipients(email)
    cev.setSubject("MyApp")
    fvc?.presentViewController(cev, animated: true, completion: nil)
}
func mailComposeController(controller: MFMailComposeViewController!, didFinishWithResult result: MFMailComposeResult, error: NSError!)
{
    controller.dismissViewControllerAnimated(true, completion: nil)
}

另外,我已经导入MessageUI了,在课堂上我有我的MFMailComposeViewControllerDelegate

4

2 回答 2

2

一件事是你不打电话canSendMail。我相信,如果您在禁用邮件时尝试显示 MFMailComposeViewController,您的应用程序将会崩溃。

在您的函数中,您将使用它,例如:

func giveFeedback(contextViewController: UIViewController) {

    if MFMailComposeViewController.canSendMail() {
        let email = ["info@website.com"]
        var cev = MFMailComposeViewController()
        cev.mailComposeDelegate = self
        cev.setToRecipients(email)
        cev.setSubject("MyApp")
        contextViewController.presentViewController(cev, animated: true, completion: nil)
    }
}

但最好早点检查状态并仅在设备上启用电子邮件时才显示按钮...

于 2015-09-13T16:33:28.680 回答
0

好吧,我也不得不猜测......有两件事对我来说看起来很可疑......第一件事是这条线

var fvc = view?.window?.rootViewController

你能这样改吗?

func giveFeedback(contextViewController: UIViewController) {
    let email = ["info@website.com"]
    var cev = MFMailComposeViewController()
    cev.mailComposeDelegate = self
    cev.setToRecipients(email)
    cev.setSubject("MyApp")
    contextViewController.presentViewController(cev, animated: true, completion: nil)
}
于 2015-09-13T16:09:36.137 回答