同时关闭视图控制器,然后呈现一个

Ril*_*ale 3 objective-c uiviewcontroller viewcontroller ios

所以我有一个 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];}
Run Code Online (Sandbox Code Playgroud)

我认为问题是我使用的self,但我不确定我用什么来代替它。

Ahm*_*med 5

它崩溃了,因为您要求同时开始关闭和呈现动画。因此,您可以通过两种方式解决此问题:

  1. 等待第一个动画完成,然后再开始下一个动画。这将促使现任 VC 被解雇,并促使新 VC 的出现。当然,用户必须等待两个动画完成才能继续与应用程序交互。为此,请_emailConfirmationPage在关闭当前 VC 的完成块中出现,如下所示:

    [self dismissViewControllerAnimated:YES completion:^{
        [self presentViewController:_emailConfirmationPage animated:YES completion:nil];
    }];
    
    Run Code Online (Sandbox Code Playgroud)
  2. 动画要么解雇要么出席,但不能两者兼而有之。这可能会更好,因为用户只需等待 1 个动画,而 1 个动画很可能足以确保流畅的用户体验。

    [self dismissViewControllerAnimated:NO completion:nil];
    [self presentViewController:_emailConfirmationPage animated:YES completion:nil];
    
    Run Code Online (Sandbox Code Playgroud)