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 を再起動してアプリを開くと、対応するボタンを 2 回タップしたときにのみピッカーが表示されます。
この後ボタンをもう一度クリックすると、ピッカーは毎回最初のタッチで表示され、iPad をシャットダウンして再起動するまで完全に機能します。
以下がコンソールに出力されます。
Warning: Attempt to present <MFMailComposeViewController: 0x200cbb70> on <ContextMenuViewController: 0x200cd1a0> whose view is not in the window hierarchy!