2012-07-11 7 views
6

Estoy tratando de tomar una captura de pantalla y enviarla por correo electrónico utilizando el compositor de correo. Todo funciona muy bien, excepto que el compositor de correo no se despide. Esta publicación parece tener el mismo problema, pero la solución provista no funcionó para mí. Can't dismiss the email composer view in iPhone?iOS Mail Composer no rechazará

- (IBAction)Email:(id)sender { 
UIGraphicsBeginImageContext(self.view.frame.size); 
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage * image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

NSData * imageData = UIImageJPEGRepresentation(image, 1.0); 

if ([MFMailComposeViewController canSendMail]) { 
    MFMailComposeViewController * mailComposer = [[[MFMailComposeViewController alloc] init] autorelease]; 
    mailComposer.delegate = self; 
    [mailComposer setSubject:@"Risk Assessment"]; 
    [mailComposer addAttachmentData:imageData mimeType:@"image/jpeg" fileName:@"attachment.jpg"];  
    [self presentModalViewController:mailComposer animated:YES];   
} 
} 

El código anterior funciona muy bien. ¿Cómo puedo llamar a esta parte inferior? Parece que el compilador simplemente pasa de largo.

-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{ 
if (error){ 
    NSString *errorTitle = @"Mail Error"; 
    NSString *errorDescription = [error localizedDescription]; 
    UIAlertView *errorView = [[UIAlertView alloc]initWithTitle:errorTitle message:errorDescription delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
    [errorView show];     
    [errorView release]; 
} 
[controller dismissModalViewControllerAnimated:YES]; 

} 

Gracias de antemano.

Respuesta

17

Trate

mailComposer.mailComposeDelegate = self; 

en lugar de

mailComposer.delegate = self; 

Desde el MFMailComposeViewController documentation:

@property(nonatomic,assign) id<MFMailComposeViewControllerDelegate> mailComposeDelegate; 

El objeto delegado es responsable de despedir a la vista que presenta este controlador de vista de la tiempo apropiado. Por lo tanto, siempre debe proporcionar un delegado y ese objeto debe implementar los métodos del protocolo MFMailComposeViewControllerDelegate.

+0

Gracias por la respuesta rápida. Esto funcionó. – talbright

+0

Buena captura. Nunca vi eso. –

+0

Literalmente trabajé durante horas tratando de encontrar mi problema, ¡y esto lo solucionó! – Mark

2

Estoy bastante seguro de que la última línea debe ser

[self dismissModalViewControllerAnimated:YES]; 

El ViewController que presenta el punto de vista modal, también lo descarta.

+0

Así es, la forma en que lo escribió debería funcionar también, pero la forma preferida es la que describió [Apple Docs on Dismissing] (http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ ModalViewControllers.html # // apple_ref/doc/uid/TP40007457-CH111-SW14) – Bersaelor