2012-04-29 3 views
0

J'ai une application que j'ai réglée sur Paysage gauche, Paysage droit et Portrait dans mon info-plist. Cependant, je fonctionne généralement en mode paysage pour tous mes contrôleurs de vue et j'ai misMail Composer se bloque sur l'iPhone

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

A l'exception du contrôleur de vue où j'ai un bouton que je veux permettre à l'utilisateur d'envoyer des e-mails. Lorsque j'essaie d'envoyer un e-mail, mon application se bloque. Cela fonctionne très bien sur mon iPad. Voici mon code pour l'envoi de l'email.

- (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]; 
} 

Je ne sais pas, mais je peux avoir en quelque sorte moi-même verrouillé en mode paysage et quand je veux envoyer un e-mail, l'iPhone veut tourner à Portrait, mais semble n'est pas autorisé à. Je ne vois aucun message d'erreur dans ma console. Merci d'avance pour votre aide.

+0

Quel est le problème et y a-t-il un journal de panne? –

+0

Mon écran devient noir et rien ne se passe. ctw – ctw

+0

Si vous changez shouldAutorotateToInterfaceOrientation pour autoriser uniquement le portrait sur cette vue, le contrôleur fonctionne-t-il? Aussi courez-vous ceci sur le simulateur ou le téléphone réel? – Joel

Répondre

1

Votre application manque probablement de mémoire, ce qui est dû à l'appel de UIImagePNGRepresentation(). Cette fonction copie l'intégralité de l'image en mémoire lors de la création du NSData. Plus l'image est grande, plus la mémoire est utilisée. Une solution possible à ce problème est d'utiliser UIImageJPEGRepresentation() au lieu de UIImagePNGRepresentation() et de passer quelque chose comme 0.6 au paramètre compressionQuality. Plus d'informations peuvent être trouvées dans la documentation d'Apple:

+0

Je // sors de l'image pour voir si cela posait un problème avec les données myImage. Cela ne fonctionne toujours pas. Il essaie de tourner au portrait puis j'obtiens un écran noir. – ctw

1

Un problème que j'ai trouvé dans iOs 6.0 que si vous n'avez aucun courrier configuré sur le périphérique, l'application va se bloquer. juste vérifier avec

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

} 

avec chèque ci-dessus, nous pouvons éviter crash.Note que je travaille sur iOs 6.1. L'espoir aidera.