2014-07-27 2 views
1

У меня есть этот код, который послать по электронной почте пользователям, Im используя MFMailCompose:почта Compose не распускать, когда нажмите кнопку отмены

.h файл

#import <UIKit/UIKit.h> 
#import <MessageUI/MessageUI.h> 
#import <MessageUI/MFMailComposeViewController.h> 

@interface TestViewController : UIViewController <MFMailComposeViewControllerDelegate, MFMessageComposeViewControllerDelegate> 

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

.m файл

@synthesize mailComposeDelegate 

-(void)sendEmail:(NSString*)valor{ 

//Valor receive the email 

    NSString *corpoMensagem = @"No have body yet..."; 

    // From within your active view controller 
    if([MFMailComposeViewController canSendMail]) { 
     MFMailComposeViewController *mailCont = [[MFMailComposeViewController alloc] init]; 
     mailCont.mailComposeDelegate = self;// Required to invoke mailComposeController when send 

     [mailCont setSubject:@"FazerBem - Recibo de Compra"]; 
     [mailCont setToRecipients:[NSArray arrayWithObject:valor]]; 
     [mailCont setMessageBody:corpoMensagem isHTML:YES]; 

     [self presentViewController:mailCont animated:YES completion:nil]; 
    } 

} 

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { 

    if (error){ 
     NSString *errorTitle = @"Erro to send"; 
     NSString *errorDescription = [error localizedDescription]; 
     UIAlertView *errorView = [[UIAlertView alloc]initWithTitle:errorTitle message:errorDescription delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
     [errorView show]; 
    } 

    [self becomeFirstResponder]; 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

-(void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{ 


} 

Когда я нажимаю кнопку отправки, он может отправить электронное письмо получателю и может закрыть экран, теперь, когда я нажимаю кнопку кнопка отмены, он открывает «Удалить проект» более 2-х вариантов и «сохранить проект», когда я нажимаю на одном из аварий приложения и возвращает мне следующую ошибку:

[TestViewController respondsToSelector:]: message sent to deallocated instance 0x16b3b470 

Как я могу решить эту проблему?

+0

Вы используете iOS 8? – Milo

+0

Я использую iOS 7.1.2 – user3781174

+0

Также включите контрольные точки исключения, чтобы выяснить, какая строка вызывает проблему. – Milo

ответ

3

Используйте переключатель случая, чтобы для выполнения действий:

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{ 
    UIAlertView *alert; 
switch (result) 
{ 
    case MFMailComposeResultCancelled: 
     break; 
    case MFMailComposeResultSaved: 
     alert = [[UIAlertView alloc] initWithTitle:@"Draft Saved" message:@"Composed Mail is saved in draft." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
     [alert show]; 
     break; 
    case MFMailComposeResultSent: 
     alert = [[UIAlertView alloc] initWithTitle:@"Success" message:@"You have successfully referred your friends." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
     [alert show]; 
     break; 
    case MFMailComposeResultFailed: 
     alert = [[UIAlertView alloc] initWithTitle:@"Failed" message:@"Sorry! Failed to send." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
     [alert show]; 
     break; 
    default: 
     break; 
} 

// Close the Mail Interface 
[self dismissViewControllerAnimated:YES completion:nil]; 
} 
+0

Сообщение, когда я отправляю письмо, работает, но когда я нажимаю кнопку «Сохранить черновик» или удаляю черновик, эта ошибка повторяется снова, и предупреждение не отображается ... – user3781174

+1

удалить из заголовка, это может помочь #import @property (nonatomic, assign) id mailComposeDelegate; –

+0

Вы отправляете электронное письмо одному человеку или нескольким народам? –

1

Удалить эту строку: [self becomeFirstResponder];

Это должно решить вашу проблему.

+0

Нет, если я удалю эту строку, электронная почта не отправит, а почта не сообщит – user3781174

+0

@ user3781174, какова ваша иерархия контроллера вида? – Milo

0

Если приведенное выше решение не работает для вас, как это было для меня, вот, вместо того, чтобы себя использования экземпляра MFMailComposeViewController:

Вместо того

[self dismissViewControllerAnimated:YES completion:nil]; 

Использование

[mailComposer dismissViewControllerAnimated:YES completion:nil];