MFMailComposeViewController无法关闭

3
我在我的应用程序中有以下代码来发送电子邮件:

let ToRecipents = ["recipient here"]
        let subject = "subject here"
        let MessageBody = "message here"

        let mc : MFMailComposeViewController = MFMailComposeViewController()

        mc.mailComposeDelegate = self


        mc.setToRecipients(ToRecipents)
        mc.setSubject(subject)
        mc.setMessageBody(MessageBody, isHTML: false)

        self.present(mc, animated: true, completion: nil)

    }

    func mailComposeController(_ controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) {

        controller.dismiss(animated: true, completion: nil)

    }

我似乎无法让MFMailComposeViewController关闭,我做错了什么?


3
你的方法(func mailComposeController(_ controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?))是否被调用了?因为声明应该是func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?)。由于不同,如果它没有被调用,我一点也不会感到惊讶。 - Larme
我认为值得指出的是,苹果在这里使用的委托命名约定是非标准的。这让我感到困惑,因为大多数委托只使用“delegate”名称设置。而这个委托使用了“mailComposeDelegate”,我只能在仔细阅读这篇文章后才注意到它。 - headache
1个回答

3
一般情况下,当委托方法未被调用时:
• 检查委托是否已设置。您可以使用mc.mailComposeDelegate = self正确设置它。
• 检查所设置的委托方法是否符合协议规范。
• 检查委托方法是否在您传递为委托的对象中正确实现(这就是您遇到问题的地方)。阅读文档,或者删除方法声明并让编译器/IDE/XCode自动完成。在Swift中,由于Swift 1、Swift 2、Swift 3/4重命名了方法并引起问题,因此在各种教程之间经常会出现问题,而教程只关注一个Swift版本。

您的方法:

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?)

以下是来自文档中的方法:

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

由于它们不同,iOS SDK 应该检查委托是否响应正确的方法,因此如果您的方法不匹配,则不应调用您的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接