dismissViewControllerAnimated solo funciona después de tocar TableView Row por segunda vez

En mi aplicación iOS, presento un UItableViewController usando

... [self presentViewController:vc animated:YES completion:nil]; ... 

Ahora, después de tocar una fila en mi vista de tabla, quiero descartar mi tableviewcontroller:

 #pragma mark UITableViewDelegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self dismissViewControllerAnimated:true completion:^(void) { NSLog(@"dismissed"); }]; } 

Ahora mi problema: dismissViewControllerAnimated funciona según lo previsto, pero tengo que tocar la fila 2 veces. La primera vez que toco la fila, no pasa nada.

Observaciones hasta ahora:

  • Toco una fila una vez: no pasa nada
  • Toco una fila 2 veces: TableviewController descarta, "despedido" se registra
  • Toco una fila una vez y descartes el Tableview tocando en algún lugar fuera del modal: "descartado" se registra

Parece que el bloque de finalización será "progtwigdo" incluso si toco solo una vez. Pero el despido no ocurre.

¿Alguien sabe qué causa este problema?

Gracias a par y ShahiM obtuve la solución: tuve que descartar en el hilo principal.

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self performSelectorOnMainThread:@selector(dismissAndshowPdf) withObject:nil waitUntilDone:NO]; } - (void) dismissAndshowPdf { [self.presentingViewController dismissViewControllerAnimated:true completion:^(void) { NSLog(@"dismissed"); }]; } 

Como dijo didSelectRowAtIndexPath: se llama al hilo principal. La magia está en llamar [self.presentingViewController dismissViewControllerAnimated:] lugar de [self dismissViewControllerAnimated:]

Llamar deselectRowAtIndexPath antes de descartar el controller

Intente agregar self.definesPresentationContext = true a su UITableViewController

Esto resolvió el problema para mí.