dismissViewControllerAnimated se llama pero ViewController no se descarta

Estoy teniendo problemas con el método dismissViewControllerAnimated que no cierra la vista.

Lo que está sucediendo en la aplicación aquí es:

  • La celda en ItemViewController está seleccionada.
  • La vista se ItemDetailViewController a ItemDetailViewController y los detalles se envían a través de un delegado.
  • El usuario selecciona 'hecho' y el evento se envía a través de un delegado para ser cerrado en ItemViewController

Todo esto funciona excepto que la vista no se descarta, no hay errores. ¿Alguien puede ver lo que está mal?

 - (void)itemDetailViewControllerDidFinish:(ItemDetailViewController *)controller { NSLog(@"Controller: %@", controller); // Returns - Controller: <ItemDetailViewController: 0x6b68b60> [self dismissViewControllerAnimated:YES completion:nil]; } 

¿Qué pasa si llama a [controller.navigationController popViewControllerAnimated:YES] lugar?

Para el caso, ¿qué pasa si llama [controller dismissViewControllerAnimated:YES completion:nil] lugar de llamarlo por su count?

La respuesta está en esta página: dismissviewcontrolleranimated-vs-popviewcontrolleranimated

dismissViewController se utiliza cuando no tiene un control de navigation. Lo más probable es que esté usando un controller de navigation, luego use self.navigationController popViewController en su lugar.

También tome nota de lemax su observación: use NULL, no nill para el manipulador de finalización

Tuve un problema en iOS5 donde la callback de finalización estándar no permitía que la vista rechazara por completo (solo la vista actual de ese modal)

 [controller dismissViewControllerAnimated:YES completion:^ { // }]; 

La solución para iOS5 es no tener una callback:

 [controller dismissViewControllerAnimated:YES completion:nil]; 

Tuve un problema cuando llamar a dismissViewControllerAnimated descartó el keyboard en un UIViewController, pero no la vista en sí misma.

Lo solucioné utilizando dos llamadas:

 [self dismissViewControllerAnimated:NO completion:nil]; [self dismissViewControllerAnimated:YES completion:nil]; 

una instantánea para el keyboard, luego una animada para el controller

Su situación es – ItemViewController -> ItemDetailViewController (pushed on navigationController) Self.dismissViewController (…) descarta un controller de vista que se presenta sobre sí mismo (en caso de que sea ItemViewController). Aquí, no presentaste ningún VC sobre ti, sino que presionaste un nuevo VC sobre la stack de navigation. Entonces, la forma correcta de descartar ItemDetailViewController sería

self.navigationController.popViewController (verdadero). lea la descripción de dismissViewController (…) para get más claridad.