2013-09-27 3 views
3

Je créeapplication se bloque sur l'objet MFMailComposeViewController dans iOS 7

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 

mais sélecteur est nul encore et l'application se bloque avec l'erreur due à l'application Mettre fin uncaught exception 'NSInvalidArgumentException', raison: 'Application tried to present a nil modal view controller on target. Il fonctionne bien dans le simulateur mais plante dans Device. Comment utiliser est MFMailComposerViewController avec IOS 7.

+0

Cet accident est probablement indépendant de l'appareil. Ma conjecture est l'appareil sur lequel il ne plante pas a un compte de messagerie configuré et l'autre ne fonctionne pas. – jszumski

Répondre

10

Vous devriez vérifier est MFMailComposeViewController en mesure d'envoyer votre courrier juste avant d'essayer de l'envoyer (par exemple l'utilisateur ne pouvait pas avoir un compte de messagerie sur l'appareil iOS).

Ainsi, votre cas pour Objective-C:

MFMailComposeViewController *myMailCompose = [[MFMailComposeViewController alloc] init]; 

if ([MFMailComposeViewController canSendMail]) { 
    myMailCompose.mailComposeDelegate = self; 
    [myMailCompose setSubject:@"Subject"]; 
    [myMailCompose setMessageBody:@"message" isHTML:NO]; 
    [self presentViewController:myMailCompose animated:YES completion:nil]; 
} else { 
    // unable to send mail, notify your users somehow 
} 

Swift 3:

let myMailCompose = MFMailComposeViewController() 

if !MFMailComposeViewController.canSendMail() { 
    myMailCompose.mailComposeDelegate = self 
    myMailCompose.setSubject("Subject") 
    myMailCompose.setMessageBody("message", isHTML: false) 
    self.present(myMailCompose, animated: true, completion: nil) 
} else { 
    // unable to send mail, notify your users somehow 
} 
+0

génial. Au moins ne plante pas –

+1

Le plus important de la docs: "Vous ne devriez pas essayer d'utiliser cette interface si la méthode' canSendMail' renvoie 'NO'." – jszumski

3

Bien vérifier si l'on peut envoyer du courrier permet d'éviter le plantage de l'application, il serait bon de savoir, pourquoi cela se passe réellement. (Dans mon cas, les mêmes accidents d'applications sur iPhone 4s, mais pas dans l'iPhone 5)

MISE À JOUR: que j'ai trouvé suivante (si la raison de plantage est intéressant pour vous!): MFMailComposeViewController produces a nil object Comme je l'ai utilisé le gmail app, je n'ai pas activé le support de messagerie par apple. Après avoir lu ceci, je l'ai activé et ... ta-da ... tout fonctionne bien!

1

Swift 3+

 if !MFMailComposeViewController.canSendMail() { 
     let composeVC = MFMailComposeViewController() 
       composeVC.mailComposeDelegate = self 
       composeVC.setToRecipients(["[email protected]"]) 
       composeVC.setSubject("subject") 
       composeVC.setMessageBody("", isHTML: false) 
       self.present(composeVC, animated: true, completion: nil) 
} 
Questions connexes