Question

Je passe d'un contrôleur de vue à un autre UINavigationController en utilisant une séquence modale. Il est important pour moi que ce contrôleur de vue (et ses contrôleurs de vue d'enfants) restent en mémoire, de sorte que des références spécifiques sont maintenues. Bien que cela ne se produise évidemment pas exactement. Lors du débogage viewWillAppear fonctionner le rootViewController (ViewControllers [0]) Points de référence à différentes adresses de mémoire entre les appels (et contient des valeurs nulles, mon problème réel). Maintenant, il y a deux possibilités qui pourraient causer ce problème:

  • Le contrôleur Uinavigation est devenu détruit
  • Le rootviewController a été détruit

Mais pour le rendre vraiment déroutant, aucun d'eux ne s'est produit; Ni le UinavigationController ni le rootViewController ne sont devenus détruits (ViewDidUnload non appelé!).

EDIT: Une enquête plus approfondie a découvert que le UinavigationController est vraiment recréé pour chaque segue modale. J'espère qu'en conservant une propriété, je pourrai résoudre le problème.

Était-ce utile?

La solution

Je me suis finalement retrouvé en créant mes propres fonctions d'ibaction qui présentent le contrôleur manuellement. Cela fonctionne très bien et est codé en moins de 5 minutes. Il suffit d'initialiser le contrôleur une fois sur ViewDidload du storyboard.

Autres conseils

Créez une référence solide dans le contrôleur de vue principale et indiquez vos nouveaux contrôleurs de vue vers cette propriété. Cela gardera la vue aussi longtemps que vous en aurez besoin, bien que cela ne soit pas recommandé pour le nombre de vues car il bat le but d'un contrôleur de navigation de NAV gantant sa propre création et supprimant les vues.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top