Je suis nouveau sur Stack Overflow, mais j'ai découvert cette question et découvert quelques autres méthodes pour charger un fichier nib qui s'assure que la méthode viewDidLoad est appelée automatiquement. est correct, mais il faut que vous sortiez du code de ViewController pour charger le fichier nib, ces deux exemples que je vous offre ici vous permettent de garder votre code dans l'implémentation de ViewController, pas forcément de meilleures façons, juste différentes. à le faire de cette façon, s'il vous plaît laissez-moi savoir vos pensées
d'abord, à l'intérieur du initWithNibName:. paquet: méthode de votre sous-classe UIViewController, vous pouvez remplacer l'appel:
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
avec quelque chose comme ceci:
self = [super initWithNibName:@"NameOfAlternateNibFile" bundle:nibBundleOrNil];
Ou, vous pouvez accomplir ce qui semble faire exactement la même chose par ce qui suit:
[[NSBundle mainBundle] loadNibNamed:@"NameOfAlternateNibFile" owner:self options:nil];
[self setView:self.view]; //this line ensures that the viewDidLoad method is called
La clé est de comprendre ce qui est écrit dans les commentaires au-dessus de la définition de fonction pour $initWithNibName:bundle:
dans le fichier UIViewController.h (inclus au bas de ma réponse ici, voir italique). La bonne chose à faire à l'aide de l'une ou l'autre de ces méthodes est que viewDidLoad est appelé dans l'un ou l'autre scénario.
Voici les directives énumérées dans UIViewController.h:
L'initialisateur désigné. Si vous sous-classe UIViewController , vous devez appeler la super implémentation de cette méthode , même si vous n'utilisez pas de NIB . (Pour plus de commodité, la méthode par défaut init fera cela pour vous, et spécifiez zéro pour les deux méthodes arguments.Dans la NIB spécifiée, le proxy propriétaire du fichier doit avoir sa classe définie sur la sous-classe du contrôleur , avec la vue de sortie connectée à la vue principale. Si vous appelez cette méthode avec un nom nul nil , alors cette méthode de classe -loadView tentera de charger une NIB dont le nom est le même que celui de votre classe de contrôleur . Si aucune NIB en fait existe alors vous devez soit appel -setView: avant -view est invoquaient, ou remplacer la méthode -loadView pour configurer votre point de vue programatically. - (id) initNithNibName: (NSString *) nibNameOrNil groupe: (NSBundle *) nibBundleOrNil;
Non, cela semble être le cas non plus. La vue chargée s'affiche correctement, mais viewDidLoad n'est jamais appelée. Je peux voir dans la pile du débogueur que sur un contrôleur 'ordinaire' chargé à partir d'une plume, viewDidLoad est appelé par la vue [UIViewController], mais ne semble pas s'appliquer aux contrôleurs 'faits à la main'. –