views:

431

answers:

1

HI, I am calling MFMailComposeViewController from UITableViewController. Problem is, delegate method mailComposeController:(MFMailComposeViewController)controllerdidFinishWithResult* is never called when I select Cancel or Send button in Mail compose window.

Here is the table view class:

@implementation DetailsTableViewController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section==0 && indexPath.row==4){
     //SEND MAIL
     MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
     controller.mailComposeDelegate = self;
     if ([MFMailComposeViewController canSendMail]) {
      [controller setSubject:[NSString stringWithFormat:@"Ref %@",[item objectForKey:@"reference"]]];
      [controller setMessageBody:@" " isHTML:NO]; 
      [controller setToRecipients:[NSArray arrayWithObject:[item objectForKey:@"email"]]]; 
      [self presentModalViewController:controller animated:YES];
     }
     [controller release];  
    }
}

- (void)mailComposeController:(MFMailComposeViewController*)controllerdidFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
// NEVER REACHES THIS PLACE
    [self dismissModalViewControllerAnimated:YES];

    NSLog (@"mail finished");
}

The application don't crash. After Cancel or Send button is presses Compose Window stays on the screen with buttons disabled. I can exit application pressing Home key.

I am able to open other Modal Views form TableView but not MailCompose.

+5  A: 

Your method signature is incorrect:

- (void)mailComposeController:(MFMailComposeViewController*)controllerdidFinishWithResult:(MFMailComposeResult)result error:(NSError*)error

Should be:

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
Chris Gummer