9
votes

MFMailCommezeViewController ne figure pas dans iOS 8

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)"

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.

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.

ps. L'affichage n'est pas nécessaire car c'est le code standard mais ici, il est de toute façon ... xxx

ios

0 commentaires

9 Réponses :


-1
votes

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];
}


2 commentaires

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?



0
votes

Le mfmailcomPoseViewController code> ne fonctionne plus sur le simulateur iOS 8.

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 *picker = [[MFMailComposeViewController alloc] init]; 
[self presentViewController:picker animated:YES completion:nil];


3 commentaires

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] 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;



1
votes

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:^{}];
}];


0 commentaires

5
votes

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é: xxx

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é: xxx

Ça fonctionne.


1 commentaires

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



0
votes

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];
}


1 commentaires

De plus, ce numéro n'a lieu qu'à iPad, car il n'y a pas de ponplovers dans iPhone / iPod



0
votes

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.


1 commentaires

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 .



0
votes

Le courrier électronique ne fonctionne pas sur le simulateur, mais cela fonctionne avec des appareils (iOS 8).


0 commentaires

6
votes

J'ai eu un problème similaire sur iOS 8, qui a fonctionné bien sur iOS 7 et auparavant.

J'ai présenté mon mfmailcomeViewController 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 in uactionheetdélégate fonction: xxx

qui était simple avec le nom de la fonction.

mais, peut-être causé par certains conflits d'animation d'interface utilisateur, montrant MFMailCompanieViewController et renvoyer uiacersheet en même temps fait mfmailCendesViewController non montré.

  • solution

    Ma solution consiste à mettre MFMailCommentViewController Afficher dans uiacersheetdelegate Fonction: xxx

    appelé après Le UIACTHECHEET Animation.

    Souhaite que cela puisse aider quelqu'un qui a le même problème.


0 commentaires

0
votes

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


}


0 commentaires