Проблема с открытием MFMailComposeViewController на устройстве, работает в симуляторе.

#iphone #ipad

#iPhone #iPad

Вопрос:

Я делаю это, работая в симуляторе, но когда мы пытаемся открыть на устройстве, программа завершается.

Пожалуйста, предложите мне быстро.

 MFMailComposeViewController *mail=[[MFMailComposeViewController alloc]init];
mail.mailComposeDelegate=self;  
[mail setToRecipients:[NSArray arrayWithObjects:@"marketing@realestateinvestar.com.au",nil]];

//[self becomeFirstResponder];
mail.navigationBar.tintColor=[UIColor blackColor];
[self presentModalViewController:mail animated:YES];
  

Ответ №1:

 if ([MFMessageComposeViewController canSendText])
  

Ваша проблема здесь. Вы пытаетесь проверить, сможет ли устройство отправлять текстовые сообщения, а не сообщения электронной почты. вы должны попробовать использовать

 if([MFMailComposeViewController canSendMail])
  

Проблема может заключаться в том, что ваше устройство не настроено ни на какие учетные записи в почте.Пожалуйста, проверьте это один раз.

Комментарии:

1. Загрузите пример кода с developer.apple.com/library/ios/#samplecode/MailComposer /… и посмотрите, работает ли это на устройстве.

Ответ №2:

Реализовали ли вы методы MFMailComposeViewControllerdelegate в своем коде??

 #pragma mark --------------------------------------------
#pragma mark MFMailComposeViewController delegate Methods

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
    switch (result) {  
        case MFMailComposeResultCancelled:  
            NSLog(@"Mail send canceled.");  
            /* 
             Execute your code for canceled event here ... 
             */  
            break;  
        case MFMailComposeResultSaved:  
            NSLog(@"Mail saved.");  
            /* 
             Execute your code for email saved event here ... 
             */  
            break;  
        case MFMailComposeResultSent: {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Mail Sent" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            alert.tag = 1;
            alert.delegate = self;
            [alert show];
            [alert release];
            break;  
        }
        case MFMailComposeResultFailed: {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Mail Sending Failed" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            alert.tag = 2;
            alert.delegate = self;
            [alert show];
            [alert release];
            break;  
        }
        default:  
            break;  
    }
    [controller dismissModalViewControllerAnimated:YES];//dismissing modal view controller
}
  

Комментарии:

1. вы проверили это? [MFMailComposeViewController может отправлять почту]

Ответ №3:

Ваш код выглядит нормально, но вы проверили, может ли устройство отправлять почту:

 if ([MFMailComposeViewController canSendText]) {
   MFMailComposeViewController *mail=[[MFMailComposeViewController alloc]init];
   mail.mailComposeDelegate=self;  
   [mail setToRecipients:[NSArray arrayWithObjects:@"marketing@realestateinvestar.com.au",nil]];

   mail.navigationBar.tintColor=[UIColor blackColor];
   [self presentModalViewController:mail animated:YES];
   [mail release], mail = nil;
} else {
    // show message to the use that he can't send an email.
}
  

Комментарии:

1. Спасибо, но это снова заканчивается на устройстве, но не в симуляторе.

2. Пожалуйста, укажите сообщение об ошибке, версию устройства для iOS и трассировку стека.