J'ai une vue quelque peu complexe que j'ai rassemblée dans un projet distinct (View-based template) (le View Controller était représenté avec une icône orange dans MainWindow.xib). C'est assez loin maintenant que j'ai décidé de le déplacer dans un autre projet où il sera géré par un contrôleur de navigation. Il est appelé à partir de la méthode de UINavigationController: straightViewController: animated:.Déplacé mon viewController sous un NavController et maintenant awakeFromNib et initWithCoder ne se déclenchent pas?
MyViewController a un fichier nib correspondant (peut-être une partie de ma confusion est la pointe de classe & sont presque identique avec le nom que .m suffixes, .h, & .xib étant différent). Lorsque c'était la vue initiale au lancement dans le projet initial à la fois awakeFromNib et initWithCoder serait appelé quand il a été instancié. Maintenant seulement viewDidLoad semble être appelé.
Je suis confus quant à quoi/pourquoi il y a une telle différence?!? J'ai trouvé d'autres sujets sur S.O. qui sont liés mais ils me laissent toujours me gratter la tête avec des réponses comme: "awakeFromNib is called when the controller itself is unarchived from a nib. viewDidLoad is called when the view is created/unarchived. This distinction is especially important when the controller's view is stored in a separate nib file."
La distinction semble dépendre de ce que, exacty, est désarchivée la vue ou le ViewController. Donc, si le ViewController est instancié et poussé alors je devrais seulement attendre que viewDidLoad soit appelé? et d'un autre côté, si mon ViewController a une IBOutlet (et un objet VC d'objet le représentant qui a été déplacé dans mon Nib) alors je peux m'attendre à ce que initWithCoder et awakeFromNib soient tous les deux appelés?
Est-ce que quelqu'un peut m'aider s'il vous plaît? On dirait qu'il est plus difficile de réutiliser ces vues/contrôleurs si différentes méthodes sont arbitrairement appelées dans des circonstances très spécifiques ... ou, comme c'est certainement le cas, c'est exactement pourquoi elles sont appelées, plutôt, des circonstances très spécifiques. Je ne comprends pas tout à fait la délimitation entre chacune des différentes méthodes pour le moment.
Quelqu'un veut-il m'aider à me redresser?
En réalité, elle est appelée par: MyViewController * myViewController = [[MyViewController alloc] initWithNibName: @ "MyViewController": nil]; bien que ce que vous dites ait du sens ... mais je me demande si c'est encore applicable dans mon cas? – Meltemi
Oui, c'est exactement la même chose. Notez le commentaire dans la première ligne de code ci-dessus. initWithNibName: bundle: est la même chose dans ce cas que init. –
En effet ... merci de souligner que je n'ai pas fait défiler à droite .. – Meltemi