2016-02-19 5 views
1

В моем приложении пользователь может отправить электронное письмо от приложения, нажав на кнопку.Электронная почта отправлена ​​с приложения iOS

Необходимая функция получает получателя электронной почты от объекта parse.com.

При первом вызове функции приложение выдает сообщение об ошибке: не является допустимым адресом электронной почты.

Я положил print("Email=",self.emailConsulta), чтобы проверить, действительно ли принятый адрес электронной почты действителен или нет, и он действителен.

Затем я закрываю письмо, и если я снова нажимаю кнопку отправки электронной почты, тогда он отлично работает, и приложение электронной почты с устройства отображает полученный адрес электронной почты в качестве получателя для сообщения электронной почты.

Вот код, я не нашел этот вопрос там, любая помощь приветствуется:

@IBAction func sendEmailButtonTapped(sender: AnyObject) { 
    let mailComposeViewController = configuredMailComposeViewController() 
    if MFMailComposeViewController.canSendMail() { 
     self.presentViewController(mailComposeViewController, animated: true, completion: nil) 
    } else { 
     self.showSendMailErrorAlert() 
    } 
} 

func configuredMailComposeViewController() -> MFMailComposeViewController { 

    let query = PFQuery(className: "datos_contacto") 
    query.getObjectInBackgroundWithId("G5w8G3kVBG", block: { 
     (questionObject: PFObject?, error: NSError?) -> Void in 

     let direccion: AnyObject! = questionObject!.objectForKey("dato_contacto") 

     self.emailConsulta = direccion as! String 

     print("Email=",self.emailConsulta) 


    }) 

    let mailComposerVC = MFMailComposeViewController() 
    mailComposerVC.mailComposeDelegate = self // Extremely important to set the --mailComposeDelegate-- property, NOT the --delegate-- property 


    print (emailConsulta) 

    mailComposerVC.setToRecipients([emailConsulta]) 
    mailComposerVC.setSubject("Enviado desde Pedro Villarejo App Clientes (iOs)...") 
    mailComposerVC.setMessageBody("Escriba aqui su texto", isHTML: false) 

    return mailComposerVC 
} 
func showSendMailErrorAlert() { 
    let sendMailErrorAlert = UIAlertView(title: "Could Not Send Email", message: "Your device could not send e-mail. Please check e-mail configuration and try again.", delegate: self, cancelButtonTitle: "OK") 
    sendMailErrorAlert.show() 
} 

// MARK: MFMailComposeViewControllerDelegate 

func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 
    controller.dismissViewControllerAnimated(true, completion: nil) 

} 
+0

Какую ошибку он бросает? – Anas

+0

@Anas Это сообщение в консоли: недействительный адрес электронной почты. И поле получателя пуст. Затем на втором запуске все отлично работает – mvasco

+3

Вы извлекаете адрес электронной почты из анализа в фоновом режиме. Я предполагаю, что в первый раз, когда этот запрос не завершился, пока вы не отобразите контроллер компоновщика – Paulw11

ответ

1

Вы запрашиваете почтовый адрес адресата из Parse в фоновом режиме, поэтому в некоторых случаях ваша функция будет перед тем как данные будут получены из Parse. Вы можете реструктурировать свой код, чтобы контроллер составления почты был представлен из закрытия по завершению -

@IBAction func sendEmailButtonTapped(sender: AnyObject) { 
    if MFMailComposeViewController.canSendMail() { 
     self.showMailComposeController() 
    } else { 
     self.showSendMailErrorAlert() 
    } 
} 

func showMailComposeController() { 

    let query = PFQuery(className: "datos_contacto") 
    query.getObjectInBackgroundWithId("G5w8G3kVBG", block: { 
     (questionObject: PFObject?, error: NSError?) -> Void in 

     let direccion: AnyObject! = questionObject!.objectForKey("dato_contacto") 

     self.emailConsulta = direccion as! String 

     print("Email=",self.emailConsulta) 

     let mailComposerVC = MFMailComposeViewController() 

     mailComposerVC.mailComposeDelegate = self // Extremely important to set the --mailComposeDelegate-- property, NOT the --delegate-- property 

     mailComposerVC.setToRecipients([emailConsulta]) 
     mailComposerVC.setSubject("Enviado desde Pedro Villarejo App Clientes (iOs)...") 
     mailComposerVC.setMessageBody("Escriba aqui su texto", isHTML: false) 
     self.presentViewController(mailComposeViewController, animated: true, completion: nil) 

    }) 

} 

func showSendMailErrorAlert() { 
    let sendMailErrorAlert = UIAlertView(title: "Could Not Send Email", message: "Your device could not send e-mail. Please check e-mail configuration and try again.", delegate: self, cancelButtonTitle: "OK") 
    sendMailErrorAlert.show() 
} 

// MARK: MFMailComposeViewControllerDelegate 

func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 
    controller.dismissViewControllerAnimated(true, completion: nil) 

} 
+0

Спасибо, Paulw11, что есть .... – mvasco

Смежные вопросы