2009-11-09 9 views
2

J'ai une application qui utilise un contrôleur de vue de table pour afficher certains éléments, après avoir cliqué sur l'un des éléments que vous pouvez sélectionner pour envoyer cet élément par courrier électronique. Une fois que cela arrive, j'utilise le code fourni par Apple "MailComposer", et envoie le mail. Cependant, après cela, le défilement dans la vue de table n'est pas aussi lisse qu'avant. J'ai vérifié avec "Fuites" et il n'y a pas de fuite dans mon code, mais il y a beaucoup d'allocation d'objet quand le contrôleur de vue modale pour le MFMailComposeViewController, et quand je ferme mon contrôleur, toute cette allocation d'objet est encore Là. Comment puis-je me débarrasser de toute cette allocation d'objets? Toute aide est la bienvenue. Je vous remercie.Retards d'application iPhone après le lancement et le rejet de MFMailComposeViewController

-Oscar

MISE À JOUR:

Je me suis rendu compte le décalage ne se produit que lorsque vous cliquez sur le champ A: textfield sur le MFMailComposeViewController et tapez quelque chose, une fois que quelque chose a été tapé, il y aura une fuite de mémoire et l'application sera lente. Cette même chose se produit également dans Mail Composer d'Apple. J'utilise le simulateur peut-être c'est pourquoi. Est-ce que quelqu'un d'autre a une expérience simmilar?

La façon dont je suis pressenting mon contrôleur est:

-(void)displayComposerSheet 
{ 
    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 
    picker.mailComposeDelegate = self; 

    NSString *mailSubject = appDelegate.mailTitle; 
    NSString *mailBody = appDelegate.mailLink; 

    NSString *formattedString = [NSString stringWithFormat:@"<a href='%@'>%@</a>", mailBody, mailBody]; 

    [picker setSubject:mailSubject]; 

    // Set up recipients 
    //NSArray *toRecipients = [NSArray arrayWithObject:@"[email protected]"]; 
    //NSArray *ccRecipients = [NSArray arrayWithObjects:@"[email protected]", @"[email protected]", nil]; 
    //NSArray *bccRecipients = [NSArray arrayWithObject:@"[email protected]"]; 

    //[picker setToRecipients:toRecipients]; 
    //[picker setCcRecipients:ccRecipients];  
    //[picker setBccRecipients:bccRecipients]; 

    // Attach an image to the email (Warning this causes a memory leak aknowledged by Apple) 
    //NSString *path = [[NSBundle mainBundle] pathForResource:@"news_icon" ofType:@"png"]; 
    //NSData *myData = [NSData dataWithContentsOfFile:path]; 
    //[picker addAttachmentData:myData mimeType:@"image/png" fileName:@"rainy"]; 

    // Fill out the email body text 
    [picker setMessageBody:formattedString isHTML:YES]; 

    [self presentModalViewController:picker animated:YES]; 
    [picker release]; 
} 

et dimissing ici:

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{ 
    .... 
    [self dismissModalViewControllerAnimated:YES]; 
} 
+0

vous devriez montrer un code de la façon dont vous instanciation et la présentation de la courrier composer view controller – Daniel

Répondre

1

Il s'agit d'une fuite de mémoire connue dans la classe MFMailComposeViewController (à partir de iOS 4.2 SDK). Les fuites peuvent même être vues dans le projet exemple MailComposer par Apple. Essayez d'exécuter l'application avec l'instrument Allocations et notez que les octets généraux augmentent à chaque fois que vous cliquez sur Annuler et que vous affichez à nouveau le compositeur.

Voir ci-dessous pour la discussion similaire:

  1. http://discussions.apple.com/thread.jspa?threadID=2158170

  2. https://devforums.apple.com/thread/23510?tstart=15

  3. https://devforums.apple.com/message/121093#121093

+0

Certaines de ces discussions sont assez anciennes, mais je vois encore le problème sur iOS 4.2 SDK. Est-ce que quelqu'un sait s'il y a une solution planifiée pour cela? –

+0

Je viens de rencontrer le même problème et je n'ai pas idée d'une solution. Seul le fait de quitter l'application et de lancer le courrier pourrait résoudre ceci - sans fournir une bonne expérience utilisateur (mais l'interface utilisateur léthargique ou retardée est encore pire) – marcus

+0

J'ai essayé de trouver une autre solution, mais seulement trouvé le comportement suivant: après que le MFMailComposeViewController a été rejeté, mettre l'application à l'arrière-plan et l'éveiller tout de suite. Dans mon cas, le défilement de la vue était correct après (l'application n'a pas été redémarrée, mais seulement réactivée). – marcus

0

Assurez-vous d'utiliser

controller.mailComposeDelegate = self; 

et non

controller.delegate = self;