dismissViewControllerAnimated ne fonctionne pas dans un bloc

J'essaye de fermer un UIViewController après qu'un UIAlertController ait été montré.

C'est mon code:

 UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:msg preferredStyle: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:^{}]; 

Cependant, l' self n'est jamais rejeté. Quelqu'un sait comment résoudre cela?

METTRE À JOUR

si je mets [self dismissViewControllerAnimated:YES completion:nil]; En dehors du bloc, ça marche.

Utilisez simplement [super.navigationController popViewControllerAnimated:YES];

Au cas où quelqu'un aurait le même problème. J'ai poussé le UIViewController , je ne l'ai pas présenté avec presentViewController:animated:completion: UIViewController C'est pourquoi [self.navigationController popViewControllerAnimated:YES]; devrait être utilisé à la place.

La chose étrange est que [self dismissViewControllerAnimated:YES completion:nil]; travaillé à l'extérieur du bloc et n'a pas à l'intérieur, je n'ai aucune explication pour cela …

[self dismissViewControllerAnimated:YES completion:nil] fermera tous les controllers de vue que la vue actuellement affichée (c'est-à-dire "self") affiche. Ce que vous voulez faire est d'exécuter cette même méthode sur le controller de vue de présentation pour "self". C'est à dire

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

Avez-vous vérifié sur quel thread le bloc est appelé? Si ce n'est pas le thread 1, il ne supprimera pas votre vue correctement, car la manipulation de l'interface user ne peut être effectuée que sur le thread 1. Essayez de créer une méthode de rejet, puis appelez-la sur le thread principal:

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