Intento crear una "clase de remitente de correo electrónico de utilidad" que pueda usar en varios proyectos de iPhone.MFMailComposeViewController en una clase separada
Creé el encabezado y la implementación de MailSender para tal fin.
MailSender.h:
@interface MailSender : NSObject<MFMailComposeViewControllerDelegate>
- (id) initWithParent:(UIViewController*) mainController;
- (void) invokeMailSender:(NSString*) to:(NSString*) subject:(NSString*) failureTitle:(NSString*) failureMessage:(NSString*) failureCancel;
@end
MailSender.m:
#import "MailSender.h"
@implementation MailSender
MFMailComposeViewController* mailer;
UIViewController* mailParentController;
- (id) initWithParent:(UIViewController*) mainController
{
if(self = [super init])
{
mailParentController = mainController;
}
return self;
}
- (void) invokeMailSender:(NSString*) to:(NSString*) subject:(NSString*) failureTitle:(NSString*) failureMessage:(NSString*) failureCancel;
{
if([MFMailComposeViewController canSendMail])
{
mailer = [[MFMailComposeViewController alloc] init];
mailer.mailComposeDelegate = self;
[mailer setSubject:subject];
NSArray *toRecipients = [NSArray arrayWithObjects:to, nil];
[mailer setToRecipients:toRecipients];
[mailParentController presentModalViewController:mailer animated:YES];
}
else
{
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:failureTitle message:failureMessage
delegate:nil cancelButtonTitle:failureCancel otherButtonTitles: nil];
[alert show];
}
}
-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
// Do nothing
[mailParentController dismissModalViewControllerAnimated:YES];
mailer = nil;
}
@end
Llamé a la clase de un controlador de vista (en un botón de acción de tocar tierra) utilizando las siguientes instrucciones:
@implementation InfoViewController
MailSender *sender;
- (IBAction)openMail:(id)sender
{
sender = [[MailSender alloc] initWithParent:self];
[sender invokeMailSender:@"[email protected]" :@"123" :@"123" :@"123" :@"123"];
}
....
@end
Cuando ejecuto el código, puedo mostrar las vistas de correo electrónico correctamente. Sin embargo, esto es seguido por un bloqueo. Tenga en cuenta que no tengo un bloqueo cuando uso MFMailComposeViewController directamente desde mi UIViewController (y asignando el controlador de visualización como el delegado),
¿Alguna idea? Lo siento, sigo siendo un nuevo en Objective C :)
i no veo ningún problema en este código ... debería funcionar bien !!! solo intente limpiar la construcción/reiniciar xcode. Creo que está cayendo desde otro lugar. –
Si elimino: mailer.mailComposeDelegate = self; ya no se cuelga! ¿Hay algún problema con mi delegado? – SiN
¿A qué hora se cuelga? ¿Es cuando se llama al método delegado 'didFinishWithResult' por casualidad? ¿También podría publicar el código de su controlador de vista que llama al método 'initWithParent'? – Mutix