Mail Composer аварийно завершает работу на iPhone

У меня есть приложение, для которого я установил альбомный режим слева, альбомный режим справа и портрет в моем информационном списке. Тем не менее, я обычно работаю в ландшафтном режиме для всех своих контроллеров представления, и я установил

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{return interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight;}

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

  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{return YES;}

Когда я пытаюсь отправить электронное письмо, мое приложение вылетает. Он отлично работает на моем iPad. Вот мой код для отправки электронной почты.

- (IBAction)sendEmail:(id)sender
{
    if ([MFMailComposeViewController canSendMail])
    {
        MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init];
        mailComposer.mailComposeDelegate = self;

       [mailComposer setSubject:@"HI!"];

        UIImage *myImage = [UIImage imageNamed:@"myPicture.png"];
        NSData *imageData = UIImagePNGRepresentation(myImage);
        [mailComposer addAttachmentData:imageData mimeType:@"image/png" fileName:@"FullTitle.png"];

       NSString *emailBody = @"Hi there!!";
        [mailComposer setMessageBody:emailBody isHTML:NO]; 

        [self presentModalViewController:mailComposer animated:YES];
    }

    else 
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Failure" 
                                                        message:@"Your device does not support email function"
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                             otherButtonTitles:nil];
        [alert show];
    }
}

- (void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    switch (result)
    {
        case MFMailComposeResultCancelled:
            NSLog(@"Mail cancelled: you cancelled the operation and no email message was queued.");
            break;
        case MFMailComposeResultSaved:
            NSLog(@"Mail saved: you saved the email message in the drafts folder.");
            break;
        case MFMailComposeResultSent:
            NSLog(@"Mail send: the email message is queued in the outbox. It is ready to send.");
            break;
        case MFMailComposeResultFailed:
            NSLog(@"Mail failed: the email message was not saved or queued, possibly due to an error.");
            break;
        default:
           NSLog(@"Mail not sent.");
             break;
    }

    [self dismissModalViewControllerAnimated:YES];
}

Я не уверен, но, возможно, я каким-то образом заблокировал себя в ландшафтном режиме, и поэтому, когда я хочу отправить электронное письмо, iPhone хочет повернуться в портретный режим, но, похоже, ему это не разрешено. Я не вижу никаких сообщений об ошибках в моей консоли. Заранее спасибо за вашу помощь.


person ctw    schedule 29.04.2012    source источник
comment
что за сбой и есть ли журнал сбоев?   -  person Michael Dautermann    schedule 29.04.2012
comment
Мой экран становится черным, и ничего не происходит. ктв   -  person ctw    schedule 29.04.2012
comment
Если вы измените shouldAutorotateToInterfaceOrientation, чтобы разрешить портрет только на этом контроллере представления, это сработает? Кроме того, вы запускаете это на симуляторе или на реальном телефоне?   -  person Joel    schedule 29.04.2012
comment
На какой модели iPhone вы тестируете? Пробовали ли вы закрыть все приложения, которые сейчас находятся в фоновом режиме? Пробовали сбросить настройки устройства?   -  person Till    schedule 29.04.2012
comment
Это все еще не работает, когда я меняю его только на портрет. Я пробовал это как на реальном телефоне, так и на симуляторе.   -  person ctw    schedule 29.04.2012
comment
Я использую модель 4S. Я перезагрузил устройство, и оно все еще не работает.   -  person ctw    schedule 30.04.2012


Ответы (2)


Вашему приложению, вероятно, не хватает памяти, что вызвано вызовом UIImagePNGRepresentation(). Эта функция копирует все изображение в память при создании NSData. Чем больше изображение, тем больше памяти используется. Возможное решение этой проблемы — использовать UIImageJPEGRepresentation() вместо UIImagePNGRepresentation() и передать что-то вроде 0,6 в параметр CompressQuality. Дополнительную информацию можно найти в документации Apple: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIKitFunctionReference/Reference/reference.html#//apple_ref/c/func/UIImageJPEGRepresentation

person datwelk    schedule 29.04.2012
comment
Я // извлекаю изображение, чтобы убедиться, что это проблема с данными myImage. Это все еще не работает. Он пытается повернуться в портретную ориентацию, после чего появляется черный экран. - person ctw; 30.04.2012

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

if([MFMailComposeViewController canSendMail])
{
       [self presentViewController:yourMailComposer animated:YES completion:nil];

} 

с приведенной выше проверкой мы можем избежать сбоя. Обратите внимание, что я работаю над iOS 6.1. Надежда поможет.

person Gagan_iOS    schedule 12.07.2013