dismissViewControllerAnimated no funciona dentro de un bloque

Intento cerrar un UIViewController después de que se haya mostrado un UIAlertController .

Este es mi código:

 UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:msg prefernetworkingStyle:UIAlertControllerStyleAlert]; UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"Accept" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { [self dismissViewControllerAnimated:YES completion:nil]; }]; [alertController addAction:okAction]; [self presentViewController:alertController animated:YES completion:^{}]; 

Sin embargo, self nunca es despedido. ¿Alguien sabe cómo resolver esto?

ACTUALIZAR

si configuro [self dismissViewControllerAnimated:YES completion:nil]; Fuera del bloque, funciona.

Simplemente use [super.navigationController popViewControllerAnimated:YES];

En caso de que alguien tenga el mismo problema. Empujé el UIViewController , no lo presentViewController:animated:completion: con presentViewController:animated:completion: Es por eso que [self.navigationController popViewControllerAnimated:YES]; Se debe usar en su lugar.

Lo extraño es que [self dismissViewControllerAnimated:YES completion:nil]; trabajó fuera de la cuadra y no entró, no tengo explicación para esto …

[self dismissViewControllerAnimated:YES completion:nil] cerrará los controlleres de vista que se muestren en la vista actual (es decir, "self"). Lo que quiere hacer es ejecutar este mismo método en el controller de vista de presentación para "self". Es decir

 [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

¿Has revisado en qué subprocess se llama al bloque? Si no es el subprocess 1, no rechazará su vista correctamente, ya que la manipulación de la interfaz de usuario solo se puede realizar en el subprocess uno. Intente crear un método para rechazar y luego llamarlo en el hilo principal:

  ...handler { [self performSelectorOnMainThread:@selector(dismissModalView) withObject:nil waitUntilDone:NO]; }]; -(void)dismissModalView { [self dismissViewControllerAnimated:YES completion:nil]; }