El delegado de MFMailComposeViewController no maneja el button CANCELAR

Posible duplicado:
La hoja de acción no se muestra cuando se toca el button de cancelación de MFMailComposeViewController

He implementado la funcionalidad de correo estándar en mi aplicación de acuerdo con el ejemplo de código provisto por Apple.

Estoy configurando el delegado de la siguiente manera:

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; picker.mailComposeDelegate = self; 

y estoy implementando

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

Al pulsar el button Enviar se invoca al delegado y todo funciona bien. Sin embargo, presionar el button Cancelar no llama al delegado y simplemente oscurece la vista; la aplicación se cuelga ahí mismo.

Después de leer hilos similares aquí, he estado pensando que la vista podría estar fuera de la pantalla por alguna razón que está más allá de mi comprensión en este punto. Tenga en count que la vista se está creando mediante progtwigción y no está utilizando un file xib.

¿Alguna idea o pensamiento?

Necesita implementar mailComposeController:didFinishWithResult:error delegado. Y en eso descarta la vista que muestra su vista de correo. Si ha abierto la vista de correo como un modalView, la forma de descartar esto es:

 - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { if(error) NSLog(@"ERROR - mailComposeController: %@", [error localizedDescription]); [self dismissModalViewControllerAnimated:YES]; return; } 

Puede ser útil para usted

 - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { // Notifies users about errors associated with the interface switch (result) { case MFMailComposeResultCancelled: //NSLog(@"Result: canceled"); break; case MFMailComposeResultSaved: //NSLog(@"Result: saved"); break; case MFMailComposeResultSent: { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Result" message:@"Mail Sent Successfully" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [alert show]; [alert release]; } break; case MFMailComposeResultFailed: //NSLog(@"Result: failed"); break; default: //NSLog(@"Result: not sent"); break; } [self dismissModalViewControllerAnimated:YES]; } 

Intente agregar delegado simple:

 [picker setDelegate:self];