Одновременно отклоняя контроллер представления, а затем представляя один

Таким образом, у меня есть 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 но я не уверен, что я использую вместо этого.

Это сбой, потому что вы просите одновременно уволить и представить анимацию. Таким образом, вы можете исправить это двумя способами:

  1. Подождите, пока первая анимация завершится до начала следующего. Это позволит оживить увольнение текущего VC и оживить презентацию нового. Конечно, пользователь должен будет дождаться завершения обеих анимаций, прежде чем они смогут продолжить взаимодействие с приложением. Чтобы сделать это, _emailConfirmationPage в блоке завершения, отклонив текущий VC следующим образом:

     [self dismissViewControllerAnimated:YES completion:^{ [self presentViewController:_emailConfirmationPage animated:YES completion:nil]; }]; 
  2. Анимируйте либо уволить, либо присутствовать, но не оба. Это может быть лучше, потому что пользователю придется подождать только 1 анимацию и что 1 анимация, скорее всего, будет достаточной для обеспечения удобства работы с жидкостями.

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

Попробуйте поместить ваш [self presentViewController:_emailConfirmationPage animated:YES completion:nil];} в completion: блок в [self dismissViewControllerAnimated:true completion:nil]; , он выполнит текущий vc после того, как он полностью отклонит другой vc

Как это:

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

Ваш код не работал, потому что он все еще оживляет dismissViewController и одновременно не может быть 2 анимации