Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios MFMailComposeViewController,Swift 4,Xcode 9_Ios_Swift_Xcode_Mfmailcomposeviewcontroller - Fatal编程技术网

Ios MFMailComposeViewController,Swift 4,Xcode 9

Ios MFMailComposeViewController,Swift 4,Xcode 9,ios,swift,xcode,mfmailcomposeviewcontroller,Ios,Swift,Xcode,Mfmailcomposeviewcontroller,我对MFMailComposeViewControllerDelegate函数有问题 func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { controller.dismiss(animated: true, completion: nil) } 警告说 实例方法“mailCompo

我对MFMailComposeViewControllerDelegate函数有问题

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
    controller.dismiss(animated: true, completion: nil)
}
警告说

实例方法“mailComposeController(:didFinishWith:error:)”几乎与协议“MFMailComposeViewControllerDelegate”的可选要求“mailComposeController(:didFinishWith:error:)”匹配

将“mailComposeController(ux0:didFinishWith:error:)”设为私有以使此警告静音

我需要将用户返回应用程序,并在单击“取消”后关闭MFMailComposeViewController,此功能不会触发

是的,我添加了代理
composeVC.mailComposeDelegate=self

如果有人有类似的问题,我会感谢你的帮助。谢谢

编辑

只有当我将语言设置为Swift 4时,才会发生这种行为。我刚回去几次,它在Swift 3.2上运行得非常好

基本上,这是代码:

class TechSupportVC: UIViewController, MFMailComposeViewControllerDelegate {
    let composeVC = MFMailComposeViewController()

override func viewDidLoad() {
    super.viewDidLoad()

    composeVC.mailComposeDelegate = self
    composeVC.setToRecipients(["desiredEmail@gmail.com"])
    composeVC.setSubject("My message")
}

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
    controller.dismiss(animated: true, completion: nil)
}

@IBAction func sendPressed(_ sender: Any) {
    guard MFMailComposeViewController.canSendMail() else {
        showMailServiceErrorAlert()
        return
    }

    composeVC.setMessageBody("Test credentials: \(firstAndLastNameTextField.text!)\nPhone: \(numberTextField.text!)\n\n\(messageTextView.text!)", isHTML: false)

    self.present(composeVC, animated: true, completion: nil)
}
}

编辑:

在向项目中添加其他类之后,我再次遇到同样的问题,并意识到转换不是问题所在

问题是我有一个名为Error的枚举,这就是为什么参数Error:无法识别Swift Error类,因此警告是正确的


我是来编辑答案的,我看到有人为此编写了修复程序,所以我接受。

我不可能应用它

func mailComposeController(_ controller: MFMailComposeViewController,
                           didFinishWith result: MFMailComposeResult,
                           error: Swift.Error?) {
    controller.dismiss(animated: true, completion: nil)
}

Swift.
前缀添加到
错误?
解决了这个问题。

我遇到了同样的问题,在取消或发送邮件后,
mailComposeControler
代理没有被呼叫。xCode在添加private时也给了我同样的警告。我没有像其他人那样遇到名为Error的枚举问题

我能修复它的唯一方法是将函数具体定义为
public

public func mailComposeController(_ controller: MFMailComposeViewController,
                                  didFinishWith result: MFMailComposeResult, error: Error?) {
    // Check the result or perform other tasks.

    // Dismiss the mail compose view controller.
    self.dismiss(animated: true, completion: nil)
}
这样做之后,效果很好


这是在Swift 4.0、xCode 10.1中实现的。

尝试删除该函数,开始键入,然后让xCode自动完成。@我已经完成了,这是我得到的唯一一个自动完成。@eNilović我在xCode 9.3 beta2和Swift 4中测试了您的代码。它工作正常,没有任何错误或警告信息。代码没有问题。删除MessageUI框架并再次添加到项目中。@Krunal我刚刚检查了一个新项目,它也在工作。我确实重置了Xcode在转换到Swift 4时所做的更改,并且是手动完成的。现在它开始工作了。老实说,我不知道发生了什么,我只能怀疑Xcode转换“损坏”了MessageUI框架。谢谢你的时间和建议@Đ或đeNilović回答您的问题,并说明您为解决此问题而采取的步骤。这将有助于今后的工作。你也可以在一天后接受自己的答案。:)我只是编辑了我的答案,并描述了我这个问题的原因。感谢你花了几个小时试图弄明白这一点。使用Swift。错误修复了它!谢谢我的猜测是,根据项目的设置方式和导入的模块,其他一些名为Error的类型会影响Swift.Error类型。