dismissModalViewController然后popViewController

jan*_*way 2 iphone uikit uinavigationcontroller ios

我一直在寻找解决我的问题的方法但到目前为止还没找到任何东西.

我有一个带有UIViewControllers堆栈的UINavigationController(如果相关的话,这都在TabbarController中).在最后一个ViewController,我想发送一封电子邮件:

MFMailComposeViewController *emailVC = [[MFMailComposeViewController alloc] init];
// fill out emailVC properties ...
[self presentModalViewController:emailVC animated:YES];
Run Code Online (Sandbox Code Playgroud)

然后在发送电子邮件后的委托中,我想关闭电子邮件viewcontroller并弹出NavigationController堆栈中的最后一个viewcontroller:

-(void)mailComposeController:(MFMailComposeViewController *)controller
      didFinishWithResult:(MFMailComposeResult)result
                    error:(NSError *)error
    {
        // save some variables here ...
        [self dismissModalViewControllerAnimated:YES]; // This line works by itself
        [self.navigationController popViewControllerAnimated:NO]; // this line causes EXC_BAD_ACCESS
Run Code Online (Sandbox Code Playgroud)

但是,最后一行导致某处崩溃.我之前和之后检查过ViewController堆栈.最后一个viewController正确地从列表中删除.

欢迎任何想法或建议.问题可能在我的代码中的其他地方,我想确保我有这个部分.谢谢.

Til*_*ill 5

尝试启动播放延迟

iOS 3及更高版本解决方案

-(void)mailComposeController:(MFMailComposeViewController *)controller
      didFinishWithResult:(MFMailComposeResult)result
                    error:(NSError *)error
{
    [...]
    [self dismissModalViewControllerAnimated:YES];
    [self performSelector:@selector(doThePop) withObject:nil afterDelay:0.40];
    [...]
}

- (void)doThePop
{
    [self.navigationController popViewControllerAnimated:NO];
}
Run Code Online (Sandbox Code Playgroud)

您可能希望微调延迟.

iOS 5及更高版本解决方案

-(void)mailComposeController:(MFMailComposeViewController *)controller
          didFinishWithResult:(MFMailComposeResult)result
                        error:(NSError *)error
{
    [...]
    [self dismissViewControllerAnimated:YES completion:^
    {
        [self.navigationController popViewControllerAnimated:NO];
    }];
    [...]
}
Run Code Online (Sandbox Code Playgroud)

虽然这看起来有点像hackish,但它应该有效.