Разработка под iOS: почему я не могу прикрепить свои plist-данные к моему MFMailComposeViewController? - PullRequest
1 голос
/ 04 декабря 2010

Я погружаюсь в разработку iOS и играю, знакомясь с классом MFMailComposeViewController для отправки электронных писем с вложениями. Данные, которые я пытаюсь прикрепить, представляют собой информацию, собранную во время выполнения, сохраненную в NSDictionary и сериализованную в NSData, но при каждой отправке электронного письма нет никаких признаков вложения. Мой код сначала отображает представление MFMailComposeViewController с уже заполненными строками электронной почты, тела и темы получателя. Затем я отображаю окно предупреждения, чтобы спросить пользователя, могу ли я собрать некоторые анонимные данные. Если они нажимают «да», мой метод обратного вызова представления оповещения компилирует данные и присоединяет их к MFMailComposeViewController. Все данные отображаются правильно, когда я перехожу через них в отладчике, но прикрепленные данные никогда не приходят с электронной почтой. Вот мой код ...

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

      NSArray *toRecipients = [NSArray arrayWithObjects:@"support@tempaddress.com", 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"]; 
        }   
    }
}

Есть идеи? Это как-то связано с тем, что я пытаюсь прикрепить данные ПОСЛЕ того, как я загружаю MFMailComposeViewController?

Большое спасибо за вашу мудрость!

1 Ответ

4 голосов
/ 04 декабря 2010

Ваше подозрение верно.

Квот Документация

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

...