2017-07-19 5 views
2

J'essaie de faire ce que dit le titre, mais quand j'appuie sur le bouton pour ouvrir le courrier, mon application se bloque lorsque je n'ai pas installé l'application de messagerie. pouvez-vous m'aider à régler cela?Si Mail est installé Fonctionne, sinon Ouvrir la page App Store

code:

if UIApplication.shared.canOpenURL(URL(string: "mailto://")!) { 
      // Mail is installed. Launch Mail and start function: 
      let toRecipients = ["[email protected]"] 

     let mc: MFMailComposeViewController = MFMailComposeViewController() 

     mc.mailComposeDelegate = self 

     mc.setToRecipients(toRecipients) 
     mc.setSubject("Why does it crash?") 

     mc.setMessageBody("שם הבר: \(CrashNameField.text!) \n\nעיר: \(CrashReasonNameField.text!)", isHTML: false) 

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

    }else { 
      // Mail is not installed. Launch AppStore to install Mail app 
      UIApplication.shared.openURL(URL(string: "https://itunes.apple.com/gb/app/mail/id1108187098?mt=8")!) 
     } 
    } 

crash a réuni les journaux:

libc++abi.dylib: terminating with uncaught exception of type NSException plantages en ligne: class AppDelegate: UIResponder, UIApplicationDelegate{. Informations supplémentaires: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target

+0

Quel est l'accident? Sur quelle ligne se plante-t-il? – Paulw11

+0

désolé, aurait dû inclure cela. Son dicton: 'libC++ abi.dylib: se terminant par une exception non interceptée de type NSException' se bloque en ligne:' class AppDelegate: UIResponder, UIApplicationDelegate {'. Extra info: 'Terminaison de l'application due à une exception non interceptée 'NSInvalidArgumentException', raison: 'L'application a tenté de présenter un contrôleur de vue modal nul sur la cible' – RandomGeek

+0

Il semble que tout ce que vous devez faire est de vérifier si' mc == nil' – Paulw11

Répondre

2

essayer cette façon

var picker = MFMailComposeViewController() 
    if MFMailComposeViewController.canSendMail() { 
     picker.mailComposeDelegate = self 
     picker.setSubject("Test mail") 
     picker.setMessageBody(messageBody.text, isHTML: true) 
     present(picker as? UIViewController ?? UIViewController(), animated: true) { _ in } 
    } 

original post here

+0

I besoin si l'application n'est pas installée, il affichera une alerte ou ouvrir un lien afin qu'il ne tombe pas en panne pouvez-vous aider avec cela? – RandomGeek

+0

juste autre condition mettre ce UIApplication.shared.openURL (URL (string: "https://itunes.apple.com/gb/app/mail/id1108187098?mt=8")!) –

+0

oui c'est le code que j'ai. .. le plantage encore si .. – RandomGeek