2010-03-11 6 views
2

Je suis en train d'ajouter des fonctionnalités e-mail à mon application. Je peux obtenir le MFMailComposeViewController pour afficher correctement et pré-remplir son sujet et le corps, mais pour une raison quelconque lorsque l'utilisateur clique sur les boutons « Annuler » ou « Envoyer » dans la barre de navigation de l'application se bloque juste. J'ai inséré une instruction NSLog() dans la première ligne de mailComposeController"didFinishWithResult:error et il n'imprime même pas cette ligne à la console.MFMailComposeViewController bloque mon application

Est-ce que quelqu'un a une idée ce qui cause le MFMailComposeViewController à accrocher comme ça?

Voici mon code de l'en-tête:

#import "ManagedObjectEditor.h" 
#import <MessageUI/MessageUI.h> 

@interface MyManagedObjectEditor : ManagedObjectEditor 
    <MFMailComposeViewControllerDelegate, UIImagePickerControllerDelegate, 
    UINavigationControllerDelegate> { 
} 

- (IBAction)emailObject; 
@end 

à partir du fichier de mise en œuvre:

if ([MFMailComposeViewController canSendMail]) {   
    MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init]; 
    mailComposer.delegate = self; 
    [mailComposer setSubject:NSLocalizedString(@"An email from me", 
               @"An email from me")]; 
    [mailComposer setMessageBody:emailString 
          isHTML:YES]; 
    [self presentModalViewController:mailComposer animated:YES]; 
    [mailComposer release]; 
} 
[error release]; 
[emailString release]; 

et est ici le code de la fonction de rappel:

#pragma mark - 
#pragma mark Mail Compose Delegate Methods 
- (void)mailComposeController:(MFMailComposeViewController *)controller 
      didFinishWithResult:(MFMailComposeResult)result 
         error:(NSError *)error { 
    NSLog(@"in didFinishWithResult:"); 
    switch (result) { 
     case MFMailComposeResultCancelled: 
      NSLog(@"cancelled"); 
      break; 
     case MFMailComposeResultSaved: 
      NSLog(@"saved"); 
      break; 
     case MFMailComposeResultSent: 
      NSLog(@"sent"); 
      break; 
     case MFMailComposeResultFailed: { 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error sending email!",@"Error sending email!") 
                  message:[error localizedDescription] 
                  delegate:nil 
                cancelButtonTitle:NSLocalizedString(@"Bummer",@"Bummer") 
                otherButtonTitles:nil]; 
      [alert show]; 
      [alert release]; 
      break; 
     } 
     default: 
      break; 
    } 
    [self dismissModalViewControllerAnimated:YES]; 
} 

Merci!

Répondre

6

Je me suis fait piquer par cela aussi, vous devez définir le mailComposeDelegate, et non le délégué.

+0

omg, comment stupide! Pourquoi Apple utiliserait-il une convention de dénomination non standard pour un délégué!?! ?? Correction du problème! –

+0

Comme il sous-classe un UINavigationController, le délégué était déjà utilisé. –

+0

+1 car cela m'avait attrapé aussi et n'est pas la solution la plus évidente. – davbryn

Questions connexes