Lorsque j'exécute Xcode 6 et utilisez le simulateur iOS 8, j'essaie de charger un MFMailCommouvereViewController, il ne vient pas. Au lieu de cela, j'ai obtenu cette erreur ...
"AVERTISSEMENT: tentative de présentation de MFMailCommentViewController: 0x7c30c400 sur ViewController: 0x7baf6000 qui présente déjà (null)" p>
Ce même code a fonctionné depuis presque un an. Maintenant, inchangé. Juste pour être sûr, j'ai couru mon application dans Xcode 6 avec le simulateur IOS 7.1 et cela a fonctionné comme avant, parfaitement. P>
Est-ce que quelqu'un sait comment afficher une vue MFMailCommentViewController dans iOS 8? Cela semble être une tâche simple et je suis sûr que c'est une solution facile. P>
ps. L'affichage n'est pas nécessaire car c'est le code standard mais ici, il est de toute façon ... p>
9 Réponses :
Voici le code que j'utilise pour afficher le compositeur de messagerie et cela fonctionne simplement sur ma version de Xcode 6.0.1 et mon périphérique (iPhone 5 avec iOS8):
-(void) showMailComposer { if(![MFMailComposeViewController canSendMail] ) { NSLog(@"Cannot send mail\n%s", __PRETTY_FUNCTION__) ; return ; } // Email Subject NSString *emailTitle = @"Test Email"; // Email Content NSString *messageBody = @"iOS programming is so fun!"; // To address NSArray *toRecipents = [NSArray arrayWithObject:@"default@gmail.com"]; MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init]; mc.mailComposeDelegate = self; [mc setSubject:emailTitle]; [mc setMessageBody:messageBody isHTML:NO]; [mc setToRecipients:toRecipents]; // Present mail view controller on screen [self presentViewController:mc animated:YES completion:NULL]; }
J'ai essayé de copier et de coller ce code exact et de l'utiliser, mais j'obtiens exactement la même erreur.
Cela peut être un coup long, mais avez-vous la dernière version de xcode?
Le Si vous avez essayé sur un périphérique physique, pouvez-vous essayer de présenter le sélecteur sans autre changement comme si: P> mfmailcomPoseViewController code> ne fonctionne plus sur le simulateur iOS 8.
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
[self presentViewController:picker animated:YES completion:nil];
J'ai fait l'essayer sur l'appareil sans chance.
Je viens de l'essayer à nouveau sur un iPad différent sans chance
@Airtower Qu'est-ce que [mfmailCommentViewController CansendMail] code> retour? Avez-vous essayé de simplement exécuter les deux lignes de code ci-dessus? Avez-vous des messages dans la sortie de la console? Avez-vous une sorte de crash? Importe-vous des messagesJei?
@import messageui; code>
Je ne sais pas pourquoi cela a fonctionné. Je ne présente aucune autre vueContrôleurs avant d'appeler cette méthode, mais si j'en ai rejeté les visiteurs, il fonctionne d'abord ...
[self dismissViewControllerAnimated:YES completion:^{ [self presentViewController:picker animated:YES completion:^{}]; }];
J'avais un problème similaire mais je n'ai pas reçu le même message. Cependant sur iOS 8, mon compositeur de messagerie ne serait pas affiché. Je l'ai lancé à partir d'un bouton sur un Uipover. Je montrerais au compositeur de messagerie, puis quelques lignes de code plus tard, j'ai appelé: Un autre fil sur Stackoverflow indiquait que cela avait peut-être quelque chose à voir avec un autre contrôleur d'affichage étant actif. Donc, j'ai déplacé ma dépôt de licenciement au-dessus de l'autre appel pour montrer le compositeur de messagerie et l'a également fait ne pas être animé: p> Ça fonctionne. P> P>
C'était ce que c'était. Je l'ai présenté d'une UIPOPOVER aussi et j'ai ajouté la ligne pour le rejoindre avant d'ouvrir la messagerie de courrier et cela a fonctionné! Merci
avait le même problème, semble que le SDK8.0 construit MFMailComposecontroller en tant que popover dans l'IOS8, vous devez donc renvoyer toute autre popover. Voici un exemple de la façon dont cela fonctionne.
-(void)sendMail{ [[[self fatherController] sharePopOver] dismissPopoverAnimated:YES]; MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init]; [controller setMailComposeDelegate:[self fatherController]]; [[self fatherController] presentViewController:controller animated:YES completion:NULL]; }
De plus, ce numéro n'a lieu qu'à iPad, car il n'y a pas de ponplovers dans iPhone / iPod
avait le même problème avec UiacerSheet. MfmailCompéViewViewController ne s'affiche pas pendant que l'uctionheet est présent (sur iOS 8 uniquement). Même si vous le renvoyez sans animations. En attente de 1 seconde résout le problème honteusement. J'ai donc utilisé uialertController (introduit dans iOS 8) pour les nouveaux appareils et la fiche uactionnelle pour les anciens. J'ai maintenant un code laid et très long, grâce à Apple. P>
Bonjour, j'ai résolu le problème avec UTILISATION UTILISÉE. Je mettais le MFMailCommentViewController Affichage dans une autre fonction UactionheetDelegate Callback - (VOID) ActionSheet: (Uiacersheet *) ActionSheet Diddismisswithbuttonindex: (Nsinteger) Boutinindex code>.
Le courrier électronique ne fonctionne pas sur le simulateur, mais cela fonctionne avec des appareils (iOS 8). P>
J'ai eu un problème similaire sur iOS 8, qui a fonctionné bien sur iOS 7 et auparavant.
J'ai présenté mon qui était simple avec le nom de la fonction. P> mais, peut-être causé par certains conflits d'animation d'interface utilisateur, montrant Ma solution consiste à mettre appelé après Le Souhaite que cela puisse aider quelqu'un qui a le même problème. p> p> mfmailcomeViewController code> après l'utilisateur appuyé sur un bouton de l'uacécheche. Donc, dans la mise en œuvre précédente, j'ai mis le compositeur de messagerie et montrez
mfmailcendévievieviewontroller code> in
uactionheetdélégate code> fonction: p>
MFMailCompanieViewController code> et renvoyer
uiacersheet code> en même temps fait
mfmailCendesViewController code> non montré. p>
MFMailCommentViewController code> Afficher dans
uiacersheetdelegate code> Fonction: p>
UIACTHECHEET CODE> Animation. P>
Dans la popover Func, faites juste cela
@IBAction func exportAsMail(sender: AnyObject) { NSNotificationCenter.defaultCenter().postNotificationName("exportAsMail", object: nil) self.dismissViewControllerAnimated(false, completion: nil) ///****animated have to be false not true }