Получение черного экрана при нажатии кнопки контакта перед кнопкой отправки

Просто пытаюсь разрешить пользователю отправлять электронные письма. В тот момент, когда нажимается кнопка «контакт», у меня появляется черный экран, а не отображение mailComposers.

Отладчик отвечает

2018-05-14 11:10:59.465952-0400 Приложение [2333:757177] Не удалось установить (keyPath) определенное пользователем проверенное свойство на (UIButton): [ setValue: forUndefinedKey:]: этот класс не соответствует кодированию значения ключа для ключ keyPath.

Однако это происходит только при перемещении меню слева направо с помощью функции SWReveal. При удалении кода снизу все остальные функции работают нормально. Только при использовании кода ниже, который дает мне черный экран в момент нажатия «кнопки контакта».

import Foundation
import UIKit
import MessageUI

class SendEmailVC: MFMailComposeViewController, MFMailComposeViewControllerDelegate
{
@IBAction func Send_Tapped(_ sender: Any)
{

    if MFMailComposeViewController.canSendMail()
    {
        contact()
        let mailComposeViewController = configureMailController() //FIXED √
        self.present(mailComposeViewController, animated: true, completion: nil)
    }
    else
    {
        showMailError()
    }
}

func configureMailController() -> MFMailComposeViewController
{
    let mailComposerVC = MFMailComposeViewController()
    mailComposerVC.mailComposeDelegate = self

    mailComposerVC.setToRecipients(["[email protected]"])
    mailComposerVC.setSubject("Hello")
    mailComposerVC.setMessageBody("How are you doing?", isHTML: false)

    return mailComposerVC
}


/*
 * DON'T EDIT THE CODE BELOW.
 */


func showMailError()
{
    let sendMailErrorAlert = UIAlertController(title: "Email failed to send", message: "Your device fail to send the email", preferredStyle: .alert)

    let dismiss = UIAlertAction(title: "Dale", style: .default, handler: nil)
    sendMailErrorAlert.addAction(dismiss)
    self.present(sendMailErrorAlert, animated: true, completion: nil)
}

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

}


person Palermox    schedule 13.05.2018    source источник
comment
К вашему сведению. Вам нужно позвонить configureMailController после проверки canSendMail.   -  person rmaddy    schedule 13.05.2018
comment
Есть ли какие-либо сообщения в консоли отладчика при запуске этого кода? Вы тестируете на реальном устройстве iOS?   -  person rmaddy    schedule 13.05.2018
comment
rmaddy, где именно я могу вызвать configureMailController, я знаю, что вы сказали, что после canSendMail я получаю предупреждение о том, что результат вызова _ не используется. Единственное сообщение в отладчике, которое я получаю, это 2018-05-13 00:09:04.648632-0400 TestingApp[1015:294288] Не удалось установить (keyPath) определяемое пользователем проверенное свойство на (UIButton): [‹UIButton 0x105d02b70› setValue :forUndefinedKey:]: этот класс не соответствует кодированию значения ключа для ключа keyPath. Происходит только при скольжении меню слева направо. Я уверен, что это не может быть проблемой, также я тестирую его на реальном устройстве iOS.   -  person Palermox    schedule 13.05.2018
comment
Переместите строку let mailComposeViewController = configureMailController() внутрь оператора if.   -  person rmaddy    schedule 13.05.2018
comment
Круто, он убрал результат предупреждения о вызове _ не используется. Тем не менее, черный экран все еще остается.   -  person Palermox    schedule 13.05.2018


Ответы (2)


Пожалуйста, используйте код, чтобы открыть почту в Swift с расширением, как показано ниже.

extension SendEmailVC: MFMailComposeViewControllerDelegate {

func contact() {

    if !MFMailComposeViewController.canSendMail() {
        ROAlert.warningAlertUnderNavigation(ROConstants.More.kNoMailConfigured, onView: self.view)
        return ()
    }
    let composeVC = MFMailComposeViewController()
    composeVC.mailComposeDelegate = self
    composeVC.setToRecipients([ROConstants.More.kContactEmail])
    // Present the view controller modally.
    self.present(composeVC, animated: true, completion: nil)
}

//MARK: - MFMailComposeViewControllerDelegate

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

    // Dismiss the mail compose view controller.
    controller.dismiss(animated: true, completion: nil)
}

}

person CrazyPro007    schedule 13.05.2018
comment
Извините, я новичок в этом, но я все еще получаю черный экран после внедрения расширения, аналогичного вашему выше. - person Palermox; 13.05.2018
comment
@Palermox Не могли бы вы предоставить мне полную реализацию, чтобы я мог вам помочь. - person CrazyPro007; 14.05.2018

Вот новый обновленный код, который устранил проблему с черным экраном. на 1 шаг ближе. Но теперь я получаю сообщение об ошибке от showMailError() при нажатии кнопки отправки. Вот что показывает отладчик

2018-05-14 15:03:40.474236-0400 имя_проекта[2510:835559] [MC] Фильтрация учетных записей почтового листа для идентификатора пакета: имя_проекта, управление исходной учетной записью: 1

import Foundation
import UIKit
import MessageUI

class SendEmailVC: UIViewController // MFMailComposeViewController: Caused black screen
{

@IBAction func SendButton_Tapped(_ sender: UIButton)
{

    if MFMailComposeViewController.canSendMail()
    {
        let mailComposeVC = self.configureMailController()
        self.present(mailComposeVC, animated: true, completion: nil)
    }
    else
    {
        self.showMailError()
    }
}

func configureMailController() -> MFMailComposeViewController
{
    let mailComposerVC = MFMailComposeViewController()

    mailComposerVC.setSubject("Hello")
    mailComposerVC.setMessageBody("How are you doing?", isHTML: true)
    mailComposerVC.setToRecipients(["<b>[email protected]</b>"])
    mailComposerVC.mailComposeDelegate = self
    /*
     * mailComposerVC.addAttachmentData( attachment: date,
     mimeType: "String here",
     fileName:  "String here" )
     */
    return mailComposerVC
}


/*
 * DON'T EDIT THE CODE BELOW.
 */


func showMailError()
{
    let sendMailErrorAlert = UIAlertController(title: "Email failed to send", message: "Your device fail to send the email", preferredStyle: .alert)

    let dismiss = UIAlertAction(title: "Dismiss", style: .default, handler: nil)

    sendMailErrorAlert.addAction(dismiss)

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



}

extension SendEmailVC: MFMailComposeViewControllerDelegate
{
    func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?)
    {
        controller.dismiss(animated: true, completion: nil)
    }
}
person Palermox    schedule 14.05.2018
comment
ДЕЛО ЗАВЕРШЕНО. ОНО РАБОТАЕТ. - person Palermox; 15.05.2018