我遇到了MFMailComposeViewController的一个奇怪问题。我过去一直在使用MFMailComposeViewController而没有任何问题,但现在我无法弄清楚这次出了什么问题,因此我希望得到你的帮助。
在我的应用程序中,我有多个UIViewControllers,其中名为MainViewController的是一个ViewController容器,我实现了一个左侧幻灯片菜单。在MainViewController中我也添加了一个UINavigationController。分配UINavigationController,然后将其添加到MainViewController,如下所示:
[self addChildViewController:self.navigationController];
[self.centerView addSubview:self.navigationController.view];
[self.navigationController didMoveToParentViewController:self];
以上工作非常精细,我可以使用导航控制器来推送和弹出其他UIViewControllers。 在左侧菜单中,我有不同的按钮,其中一个被命名为"关于"。按下时,执行以下代码:
NSArray *array = [NSArray arrayWithObject:[AboutViewController sharedViewController]];
[self.navigationController setViewControllers:array animated:NO];
在AboutViewController中我有一些按钮,其中一个是"发送反馈"。 "发送反馈"按钮执行以下代码:
if([MFMailComposeViewController canSendMail]) {
MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init];
mailer.mailComposeDelegate = self;
NSArray *toRecipients = [NSArray arrayWithObjects:[NSString stringWithFormat:@"feedback@test.com"], nil];
[mailer setToRecipients:toRecipients];
[mailer setSubject:[NSString stringWithFormat:@"Feedback"]];
[self presentViewController:mailer animated:YES completion:nil];
}
哪个也有效。 AboutViewController实现了MFMailComposeViewControllerDelegate及其方法:
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
switch (result) {
case MFMailComposeResultCancelled:
//NSLog(@"Mail cancelled: you cancelled the operation and no email message was queued.");
break;
case MFMailComposeResultSaved:
//NSLog(@"Mail saved: you saved the email message in the drafts folder.");
break;
case MFMailComposeResultSent:
//NSLog(@"Mail send: the email message is queued in the outbox. It is ready to send.");
break;
case MFMailComposeResultFailed:
//NSLog(@"Mail failed: the email message was not saved or queued, possibly due to an error.");
break;
default:
//NSLog(@"Mail not sent.");
break;
}
// Remove the mail view
[self dismissViewControllerAnimated:YES completion:nil];
}
它在这里让我头疼。我打电话给
[self dismissViewControllerAnimated:YES completion:nil];
正如我之前在应用程序中所做的那样,它没有任何问题。但在这种情况下,MFMailComposeViewController没有被解雇,并且"取消"和"发送"按钮变为无效。我尝试在dismiss完成块中实现NSLog,但它永远不会被调用。
我现在用Google搜索了几个小时,无法找到解决此问题的方法。我希望你能帮我解决这个奇怪的问题。如果您需要更多信息,请询问。
提前致谢。 - 塞巴斯蒂安
答案 0 :(得分:0)
您必须将邮件控制器打开到父视图控制器中。要做到这一点,你必须使用委托。 在父类中调用MFMailComposeViewController并通过自定义委托
传递值答案 1 :(得分:0)
我设法解决了这个问题。我发现当MainViewController变得可见时,MainViewController管理的其中一个线程在主线程中启动了无限循环。