2013-05-24 2 views
1

Я хочу представить MFMailComposeViewController с помощью диспетчера режимов просмотра. В основном этот метод работает, но он не работает надежно:MFMailComposeViewController представлен только после второго нажатия

-(void)sendMailTapped:(id)sender{ 

    [self resetButtonsStateAfterTapping:sender]; 
    [self dismissPopover]; 

    if (filesize>10) { 
     [self showAlertForExceededMaximumAttachmentSize]; 
     return; 
    } 

    @try { 
     MFMailComposeViewController *picker = 
            [[MFMailComposeViewController alloc] init]; 
     if ([MFMailComposeViewController canSendMail]) { 
      picker.mailComposeDelegate = self; 
      NSURL *path =[NSURL urlWithPath:[pageInfoDict valueForKey:@"file_name"] 
             docId:[pageInfoDict valueForKey:@"id_doc"] 
            encrypted:[[pageInfoDict valueForKey:@"encrypted"] 
                     boolValue]] ; 
      NSString *fileName = [pageInfoDict valueForKey:@"title"]; 
      if([fileName length] == 0) { 
       fileName = [path lastPathComponent]; 
      } 
      if(![fileName hasSuffix:[path pathExtension]]){ 
       fileName=[fileName stringByAppendingFormat:@".%@",[path pathExtension]]; 
      } 

      [picker setSubject:[@"Send document: " stringByAppendingString:fileName]]; 

      NSArray *ccRecipients = [NSArray arrayWithObjects: 
            [[CustomisationConfig getAppConfig] getCCMail],nil]; 
      [picker setCcRecipients:ccRecipients]; 

      NSArray *bccRecipients = [NSArray arrayWithObjects: 
            [[CustomisationConfig getAppConfig] getBCCMail],nil]; 
      [picker setBccRecipients:bccRecipients]; 

      NSData *myData = [path decryptedData]; 
      [picker addAttachmentData:myData 
            mimeType:fileMIMEType(fileName) fileName:fileName]; 

      NSString *emailBody = [NSString stringWithFormat: 
            @"\n\nThis file was sent using %@.", 
            [DCConfiguration getHumanReadableAppName] ]; 
      [picker setMessageBody:emailBody isHTML:NO]; 

      [self presentViewController:picker animated:true completion:^(void){}]; 
     } 
    } 
    @catch (NSException *exception) { 
     NSLog(@"ContextMenuViewController sendMailTapped:%@",exception.description); 
    }  
} 

Если я перезагрузить IPad и открыть приложение, сборщик будет представлен только на втором нажатии на соответствующую кнопку.
Если я нажму снова на кнопку после этого, сборщик будет отображаться на первом касании каждый раз, и он отлично работает, пока я не выключу и не перезагружу iPad.

Ниже выводится на консоль:

Warning: Attempt to present <MFMailComposeViewController: 0x200cbb70> on <ContextMenuViewController: 0x200cd1a0> whose view is not in the window hierarchy! 
+0

Любая причина, по которой вам нужно вызвать функцию удержания в начале метода sendMailTapped? –

ответ

0

Что вызова метода sendMailTapped:? Если его построитель интерфейса, вы должны изменить его на IBAction вместо void и соединить их в построителе интерфейса.

Смежные вопросы