2012-04-29 3 views
0

У меня есть приложение, которое я установил в «Пейзаж слева», «Пейзаж справа и портрет» в моем Info-plist. Тем не менее, я обычно работаю в ландшафтном режиме для всех моих контроллеров зрения и я поставилСбой почтовых композиторов на 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 хочет повернуть на портрет, но, кажется, не допускается. Я не вижу сообщений об ошибках в консоли. Заранее благодарим за помощь.

+0

что случилось, и есть ли аварийный журнал? –

+0

Мой экран становится черным и ничего не происходит. ctw – ctw

+0

Если вы меняете shouldAutorotateToInterfaceOrientation, чтобы разрешить портрет на этом контроллере, он работает? Также вы используете это на симуляторе или на самом телефоне? – Joel

ответ

1

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

+0

Я // из изображения, чтобы узнать, была ли проблема с данными myImage. Это все еще не работает. Он пытается поворачиваться к портрету, тогда я получаю черный экран. – ctw

1

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

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

} 

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