J'ai un contrôleur de vue racine avec sous-vue à encapsuler pour les vues des contrôleurs de vue enfant. L'idée de base est que mon contrôleur racine possède un contrôleur de vue gauche et droit, tous deux présents sur l'écran (similaire à un contrôleur splitview). Au chargement, une vue modale apparaît sur le contrôleur de la vue racine et demande des détails. La vue modale contacte ensuite un serveur et est rejetée après avoir reçu une réponse. Le contrôleur racine ajoute les contrôleurs de vue de l'enfant avec le code suivant:Le conteneur du contrôleur de vue manque sporadiquement viewWillAppear dans les contrôleurs enfants
[self addViewController:self.leftViewController];
[self addViewController:self.rightViewController];
[self addView:self.rightViewController.view ToWrapper:self.rightViewWrapper];
[self addView:self.leftViewController.view ToWrapper:self.leftViewWrapper];
Où ajouter contrôleur de vue est:
[self addChildViewController:controller];
[controller didMoveToParentViewController:self];
et addViewToWrapper ajoute que le point de vue du contrôleur de vue de la sous-vue pertinente du RootViewController comme suit:
[[viewWrapper.contentView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
newSubview.frame = viewWrapper.contentView.bounds;
newSubview.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[viewWrapper.contentView addSubview:newSubview];
99% du temps cela fonctionne bien. Les deux vues apparaissent instantanément et viewWillAppear se déclenche dans les deux contrôleurs enfants. Cependant, parfois l'écran reste blanc pendant une courte période et viewWillAppear ne se déclenche pas dans le bon contrôleur de vue (EDIT: et la gauche). Toutes les autres méthodes d'affichage du cycle de vie sont activées, mais pas viewWillAppear.
Malheureusement, je ne peux pas donner de code pour toute la classe car elle est complexe et propriétaire. Mais y a-t-il des indices dans cette description pour ce comportement intermittent?
Je devrais également ajouter que cela se passe bien après appDelegate a commencé l'application. Derrière la vue modale sont 2 espaces réservés vides. Lorsque la vue modale est ignorée, ces contrôleurs sont supprimés et les nouveaux contrôleurs enfants ajoutés. –
Un indice assez important est que la suppression de l'écran modal, supprime le problème. Quelque chose lors du rejet de l'écran modal bloque la vue apparaîtra des contrôleurs de vue enfant. –