MFMailComposeViewController解除了问题

时间:2014-08-19 19:11:02

标签: ios objective-c iphone email uiviewcontroller

我遇到了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搜索了几个小时,无法找到解决此问题的方法。我希望你能帮我解决这个奇怪的问题。如果您需要更多信息,请询问。

提前致谢。 - 塞巴斯蒂安

2 个答案:

答案 0 :(得分:0)

您必须将邮件控制器打开到父视图控制器中。要做到这一点,你必须使用委托。 在父类中调用MFMailComposeViewController并通过自定义委托

传递值

答案 1 :(得分:0)

我设法解决了这个问题。我发现当MainViewController变得可见时,MainViewController管理的其中一个线程在主线程中启动了无限循环。