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!
omg, comment stupide! Pourquoi Apple utiliserait-il une convention de dénomination non standard pour un délégué!?! ?? Correction du problème! –
Comme il sous-classe un UINavigationController, le délégué était déjà utilisé. –
+1 car cela m'avait attrapé aussi et n'est pas la solution la plus évidente. – davbryn