2012-07-11 7 views
6

Sto cercando di acquisire uno screenshot e inviarlo tramite posta elettronica utilizzando il compositore di posta. Tutto funziona alla grande, tranne che il compositore di posta elettronica non licenzia. Questo post sembra avere lo stesso problema, ma la soluzione fornita non ha funzionato per me. Can't dismiss the email composer view in iPhone?Il compositore della posta iOS non verrà eliminato

- (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];   
} 
} 

Il codice sopra funziona perfettamente. Come posso chiamare questa porzione inferiore. Sembra che il compilatore salti appena oltre.

-(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]; 

} 

Grazie in anticipo.

risposta

17

Prova

mailComposer.mailComposeDelegate = self; 

invece di

mailComposer.delegate = self; 

Dal MFMailComposeViewController documentation:

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

L'oggetto delegato è responsabile per respingere la vista presentato da questo controller della vista al tempo appropriato. Pertanto, è sempre necessario fornire un delegato e tale oggetto deve implementare i metodi del protocollo MFMailComposeViewControllerDelegate.

+0

Grazie per la rapida risposta. Questo ha funzionato. – talbright

+0

Bella cattura. Non l'ho mai visto. –

+0

Ha letteralmente lavorato per ore cercando di trovare il mio problema, e questo l'ha risolto !!! – Mark

2

Sono abbastanza sicuro che l'ultima linea dovrebbe essere

[self dismissModalViewControllerAnimated:YES]; 

Il ViewController che ha presentato il modale vista, respinge anche.

+0

Esatto, il modo in cui l'ha scritto dovrebbe funzionare anche, ma il modo preferito è quello che hai descritto [Apple Docs su Dismissing] (http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ ModalViewControllers.html # // apple_ref/doc/uid/TP40007457-CH111-SW14) – Bersaelor

Problemi correlati