44 votes

licencier ViewControllerAnimated est appelé mais ViewController n'est pas licencié

Je vais avoir des problèmes avec l' dismissViewControllerAnimated méthode n'est pas la fermeture de la vue.

Ce qui se passe dans l'app est ici:

  • Cellule en ItemViewController est sélectionné.
  • La vue est push*ed ItemDetailViewControlleret les détails sont envoyés par l'intermédiaire d'un délégué
  • L'utilisateur sélectionne "fait" et l'événement est envoyé par l'intermédiaire d'un délégué à être fermé dans l' ItemViewController

Tout cela fonctionne sauf pour l'Affichage n'est pas rejeté, il n'y a pas d'erreurs. N'importe qui peut voir ce qui est mal?

- (void)itemDetailViewControllerDidFinish:(ItemDetailViewController *)controller
{
    NSLog(@"Controller: %@", controller);
    // Returns - Controller: <ItemDetailViewController: 0x6b68b60>

    [self dismissViewControllerAnimated:YES completion:nil];
}

Merci pour votre temps, Ad

66voto

Nick Lockwood Points 23277

Que faire si vous appelez [controller.navigationController popViewControllerAnimated:YES] place?

D'ailleurs, si vous appelez [controller dismissViewControllerAnimated:YES completion:nil] au lieu de l'appeler vous-même?

10voto

Leander Points 223

La réponse est dans cette page: dismissviewcontrolleranimated-vs-popviewcontrolleranimated

dismissViewController est utilisé lorsque vous n'avez pas de navigationcontroller. Probablement vous utilisez une manette de navigation, puis utilisez auto.navigationController popViewController à la place.

Également prendre note de lemax sa remarque: utilisez la valeur NULL, pas nill pour la completionhandler

5voto

Danoli3 Points 560

J'ai eu un problème dans iOS5 où le rappel d'achèvement standard ne permettait pas à la vue d'être complètement ignorée (seule la vue actuelle en mode poussé de ce modal)

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

La solution pour iOS5 est de ne pas avoir de rappel:

 [controller dismissViewControllerAnimated:YES completion:nil];
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X