I use MFMailComposeViewController in my conde to provide Mail functionality, but after sending mail or when I want to cancel mail, it will fail.
below is my code:
(IBAction)FnForPlutoSupportEmailButtonPressed:(id)sender { { if ([MFMailComposeViewController canSendMail]) { MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init]; mailer.mailComposeDelegate = self; [mailer setSubject:@"Need help from Pluto support team"]; NSArray *toRecipients = [NSArray arrayWithObjects:@" support@myplu.to ",nil]; [mailer setToRecipients:toRecipients]; NSString *emailBody = @""; [mailer setMessageBody:emailBody isHTML:NO]; //mailer.modalPresentationStyle = UIModalPresentationPageSheet; [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 { // Notifies users about errors associated with the interface switch (result) { case MFMailComposeResultCancelled: break; case MFMailComposeResultSaved: break; case MFMailComposeResultSent: break; case MFMailComposeResultFailed: break; default: break; } [self dismissModalViewControllerAnimated:YES]; }
I read all the blog posts, but no solution was found. This blog post has a good explanation about this, but according to this, I am not presenting my view controller in viewdidload or viewdidappear.
I get EXE_BAD_ACCESS, The following is the crash log:
**
> #0 0x00000000 in ?? () > #1 0x01dc5aa4 in -[UIViewController _setViewAppearState:isAnimating:] () > #2 0x01dc5f47 in -[UIViewController __viewDidDisappear:] () > #3 0x01dc6039 in -[UIViewController _endAppearanceTransition:] () > #4 0x01dd2e7e in -[UIViewController(UIContainerViewControllerProtectedMethods) endAppearanceTransition] () > #5 0x01fc8de1 in -[UIWindowController transitionViewDidComplete:fromView:toView:] () > #6 0x01da334b in -[UITransitionView notifyDidCompleteTransition:] () > #7 0x01da3070 in -[UITransitionView _didCompleteTransition:] () > #8 0x01da531b in -[UITransitionView _transitionDidStop:finished:] () > #9 0x01d23fb6 in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] () > #10 0x01d24154 in -[UIViewAnimationState animationDidStop:finished:] () > #11 0x0163bbce in CA::Layer::run_animation_callbacks () > #12 0x03664fe4 in _dispatch_client_callout () > #13 0x03655997 in _dispatch_main_queue_callback_4CF () > #14 0x012c03b5 in __CFRunLoopRun () > #15 0x012bf804 in CFRunLoopRunSpecific () > #16 0x012bf6db in CFRunLoopRunInMode () > #17 0x030f1913 in GSEventRunModal () > #18 0x030f1798 in GSEventRun () > #19 0x01ce82c1 in UIApplicationMain ()
**
According to the updated apple for ios 5 doc, they mentioned:
presentModalViewController: animated:
Represents a modal view controlled by this presentation controller to the user. (Using presentViewController:animated:completion: not recommended.)
- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated Parameters
Disables the view controller that was presented by the receiver. (Using dismissViewControllerAnimated:completion: not recommended.)
- (void)dismissModalViewControllerAnimated:(BOOL)animated
I tried this too, but it fails anyway