2010-12-03 18 views
1

Je suis en train de plonger dans le développement iOS et je suis en train de jouer en me familiarisant avec la classe MFMailComposeViewController pour l'envoi de courriels avec pièces jointes. Les données que j'essaie d'attacher sont des informations collectées à l'exécution, stockées dans un NSDictionary et sérialisées vers NSData, mais chaque fois que l'e-mail est envoyé, il n'y a aucun signe de pièce jointe. Mon code affiche d'abord la vue MFMailComposeViewController avec le courrier électronique, le corps et les lignes d'objet du destinataire déjà remplis. Ensuite, j'affiche une boîte d'alerte pour demander à l'utilisateur si je peux collecter des données anonymes. Si elles cliquent sur oui, ma méthode de rappel de vue d'alerte compile les données et les attache au MFMailComposeViewController. Toutes les données semblent correctes quand je les passe dans le débogueur, mais les données jointes n'arrivent jamais avec l'email. Voici mon code ...Développement iOS: Pourquoi ne puis-je pas joindre mes données plist à mon MFMailComposeViewController?

-(void)displayComposerSheet 
{ 
    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 
    picker.mailComposeDelegate = self; 
    [picker setSubject:@"Temp Subject Line"]; 

     NSArray *toRecipients = [NSArray arrayWithObjects:@"[email protected]", nil]; 
    [picker setToRecipients:toRecipients]; 

     NSString *emailBody = @"Temporary email body"; 
     [picker setMessageBody:emailBody isHTML:NO]; 

     [self setMailViewController:picker]; 

    [self presentModalViewController:picker animated:YES]; 

    UIAlertView* uiav= [[UIAlertView alloc] initWithTitle: @"May we collect data from you?" 
                message: @"May we collect some data form you?" 
                delegate: self cancelButtonTitle: @"No" otherButtonTitles: nil]; 

    [uiav addButtonWithTitle:@"Yes"]; 
    [uiav setDelegate:self]; 

    [uiav show]; 
    [uiav release]; 

    [picker release]; 
} 

- (void) alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
     if(buttonIndex == 1) 
     { 
      NSMutableDictionary *appData = [[[NSMutableDictionary alloc] init] autorelease]; 
      . 
      . //Compile the application data to attach to email 
      . 

      NSString *errorString = [[[NSString alloc] init] autorelease]; 
      NSData *attachData = [NSPropertyListSerialization dataFromPropertyList:appData format:NSPropertyListXMLFormat_v1_0 errorDescription:&errorString]; 
      [[self mailViewController] addAttachmentData:attachData mimeType:@"text/xml" fileName:@"app data"]; 
     } 
    } 
} 

Des idées? Cela a-t-il quelque chose à voir avec le fait que j'essaye de joindre les données APRÈS avoir chargé le MFMailComposeViewController?

Merci beaucoup pour votre sagesse!

Répondre

4

Votre soupçon est correct.

Quoth the documentation

... après avoir présenté l'interface, votre application ne peut pas faire d'autres modifications au contenu e-mail. L'utilisateur peut toujours modifier le contenu à l'aide de l'interface, mais les modifications programmatiques sont ignorées. Ainsi, vous devez définir les valeurs des champs de contenu avant de présenter l'interface.

+0

ahh l'a manqué! Je vous remercie! – BeachRunnerFred