MFMailComposeViewController will not dismiss

dismiss, ios, mfmailcomposeviewcontroller

Solution

You've implemented the delegate method, but haven't set the delegate:

mailer.mailComposeDelegate = self;

After you create `mailer`.

Problem

After following a tutorial that showed me how to implement In-App Mail, it seems to fail upon the cancel button and send button to dismiss the view. Now I have read a few comments on here that say I should implement this method: ``` -(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { [self dismissModalViewControllerAnimated:YES]; } ``` But that does not solve the issue, not in the simulator or on my iPhone 4 - The message does get send though, but the view does not dismiss. This is my code so far: ``` #pragma mark - InApp Mail - (IBAction)openMail:(id)sender { if ([MFMailComposeViewController canSendMail]) { MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init]; [mailer setSubject:@"iOS School - MultipleAlertViews"]; NSArray *toRecipients = [NSArray arrayWithObjects:@"", nil]; [mailer setToRecipients:toRecipients]; // Attach an image to the email NSString *pathFile01 = @"http://dl.dropbox.com/u/61711378/iOS%20School%20-%20Docs/MultipleAlertViewsVCh.pdf"; NSURL *pdfURLFile01 = [NSURL URLWithString:pathFile01]; NSData *pdfDataFile01 = [NSData dataWithContentsOfURL:pdfURLFile01]; [mailer addAttachmentData:pdfDataFile01 mimeType:@"application/pdf" fileName:@"MultipleAlertViewsVCh.pdf"]; NSString *pathFile02 = @"http://dl.dropbox.com/u/61711378/iOS%20School%20-%20Docs/MultipleAlertViewsVCm.pdf"; NSURL *pdfURLFile02 = [NSURL URLWithString:pathFile02]; NSData *pdfDataFile02 = [NSData dataWithContentsOfURL:pdfURLFile02]; [mailer addAttachmentData:pdfDataFile02 mimeType:@"application/pdf" fileName:@"MultipleAlertViewsVCm.pdf"]; NSString *emailBody = @"Hello,<br/><br/>You requested code for this project, which you can now use in XCode <br/><br/> You will find 2 Attachements.<br/>One is the Header file and the other is the Implementation file.<br/><br/>Thank you for using this app, if you find it useful, don't forget to give it a Rating in the App Store.<br/><br/>Kind Regards,<br/>iOS School"; [mailer setMessageBody:emailBody isHTML:YES]; [self presentModalViewController:mailer animated:YES]; } else { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Failure" message:@"Your device doesn't support the composer sheet" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } } - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { switch (result) { case MFMailComposeResultCancelled: NSLog(@"Mail cancelled: you cancelled the operation and no email message was queued."); break; case MFMailComposeResultSaved: NSLog(@"Mail saved: you saved the email message in the drafts folder."); break; case MFMailComposeResultSent: NSLog(@"Mail send: the email message is queued in the outbox. It is ready to send."); break; case MFMailComposeResultFailed: NSLog(@"Mail failed: the email message was not saved or queued, possibly due to an error."); break; default: NSLog(@"Mail not sent."); break; } // Remove the mail view [self dismissModalViewControllerAnimated:YES]; } ``` As you can see, I have implemented that `- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error` But it is not working - anything else I am missing - I am using iOS 5.1 Cheers Jeff

Original source