gpt4 book ai didi

ios - 无法关闭我从 SKScene 调用的 MFMailComposeViewController

转载 作者:行者123 更新时间:2023-11-28 13:29:59 24 4
gpt4 key购买 nike

我正在尝试从我的游戏应用程序中发送电子邮件。在我的一个 SKScenes 中,当你按下它时我有一个 Sprite ,它调用 FeedbackVC().sendEmail()。这会打开电子邮件 viewController,但它不会正确关闭。这是我的整个 FeedbackVC 类(class)。我使用了 getTopMostViewController 函数,因为没有它我会收到错误“警告:尝试显示其 View 不在窗口层次结构中!”。我的代码将成功打开带有预填充字段的 MFMailComposeViewController,如果我按下发送按钮,它实际上会将电子邮件发送到我的电子邮件,但它不会关闭,如果我尝试取消电子邮件,它也不会关闭。为什么我的 viewController 不关闭,以便在发送或取消电子邮件后继续回到我的游戏?

import Foundation
import MessageUI

class FeedbackVC: UINavigationController, MFMailComposeViewControllerDelegate {

func getTopMostViewController() -> UIViewController? {
var topMostViewController = UIApplication.shared.keyWindow?.rootViewController
while let presentedViewController = topMostViewController?.presentedViewController {
topMostViewController = presentedViewController
}
return topMostViewController
}

func sendEmail() {
if MFMailComposeViewController.canSendMail() {
let mail = MFMailComposeViewController()
mail.mailComposeDelegate = self

mail.setToRecipients(["support@supportemail.com"])
mail.setSubject("In-App Feedback")
mail.setMessageBody("", isHTML: false)
self.getTopMostViewController()!.present(mail, animated: true, completion: nil)
} else {
print("Failed To Send Email!")
}
}

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

我还尝试在 sendEmail() 函数中设置 UINavigationControllerDelegate。

mail.delegate = self as? UINavigationControllerDelegate

我也尝试过弹出 View Controller 并返回到 mailComposeController 中最顶层的 View Controller 。

popToRootViewContoller(animated: true)

getTopMostViewController()?.dismiss(animated: true, completion: nil)

我已经尝试按照 https://developer.apple.com/documentation/messageui/mfmailcomposeviewcontroller 上的指南进行操作,但它没有用,因为我认为我的场景不同,因为我要从 SKScene 转到 MFMailCompose ViewController,然后再回到 SKScene。

最佳答案

我是从事此项目的其他开发人员之一。发帖以防有人遇到类似问题。

我们试图以如下方式调用我们的 FeedbackVC:

if nodeTapped.name == "Feedback" {
let vc = FeedbackVC()
vc.emailButtonTapped(foo)
}

这将创建 FeedbackVC 类,调用 emailButtonTapped 方法,然后在退出 if 语句时从内存中释放该类。这意味着单击取消或发送将尝试访问已释放的空间,从而导致 EXC_BAD_ACCESS 错误。我通过将 vc 声明为类变量而不是在 if 语句中声明它来修复此问题。

关于ios - 无法关闭我从 SKScene 调用的 MFMailComposeViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57540209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com