Ios 同时关闭视图控制器,然后显示一个

Ios 同时关闭视图控制器,然后显示一个,ios,objective-c,uiviewcontroller,viewcontroller,Ios,Objective C,Uiviewcontroller,Viewcontroller,因此,我有一个VC,我在点击按钮时调用它(它是一个MFMailComposeViewController),当消息被发送时,它会关闭ViewController,我希望它在发送完成后显示一个不同的控件。但不是这样做,而是在每次发送电子邮件后崩溃。我知道我做错了什么,但我不知道是什么 这是我的代码,它驳回并呈现了新代码 - (void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResu

因此,我有一个VC,我在点击按钮时调用它(它是一个MFMailComposeViewController),当消息被发送时,它会关闭ViewController,我希望它在发送完成后显示一个不同的控件。但不是这样做,而是在每次发送电子邮件后崩溃。我知道我做错了什么,但我不知道是什么

这是我的代码,它驳回并呈现了新代码

- (void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
[self dismissViewControllerAnimated:true completion:nil];
[self presentViewController:_emailConfirmationPage animated:YES completion:nil];}

我想问题是我使用了
self
,但我不确定用什么来代替它。

试着把你的
[self-presentViewController:_-emailConfirmationPage-animated:YES-completion:nil];}进入
完成:
块,在
[自解除视图控制器激活:真正完成:无],它将在完成关闭另一个vc后执行当前vc

像这样:

[self dismissViewControllerAnimated:YES completion:^{
        [self presentViewController:_emailConfirmationPage animated:YES completion:nil];
    }];

您的代码无法工作,因为它仍在设置动画
dismissViewController
,并且不能同时有两个动画

它正在崩溃,因为您要求同时启动dismise和present动画。因此,您可以通过两种方式解决此问题:

  • 等待第一个动画完成,然后再开始下一个动画。这将使当前VC的解雇和新VC的演示变得生动。当然,用户必须等待两个动画完成后才能继续与应用程序交互。为此,请在解除当前VC的完成块中显示
    \u emailConfirmationPage
    ,如下所示:

    [self dismissViewControllerAnimated:YES completion:^{
        [self presentViewController:_emailConfirmationPage animated:YES completion:nil];
    }];
    
  • 设置“驳回”或“呈现”的动画,但不能同时设置两者。这可能会更好,因为用户只需等待1个动画,而这1个动画很可能足以确保流畅的用户体验

    [self dismissViewControllerAnimated:NO completion:nil];
    [self presentViewController:_emailConfirmationPage animated:YES completion:nil];
    

  • 我有点困惑。我将如何设置[自我解除视图控制器激活:真正完成:零];进入[self-presentViewController:_emailConfirmationPage动画:是完成:无];?你把它放在
    nil
    部分的
    block
    格式中,请看我的编辑,这不应该是另一种方式吗?我不想让它在视图控制器被解除后显示它吗?啊,因为我看到你先使用
    解除
    ,然后你只调用
    当前
    ?,但这只是个想法,你可以按你想要的方式恢复它:我直到现在才意识到,但我的应用程序仍然崩溃。也没有什么真正改变。