2009-08-05 6 views
3

Le délégué de l'application possède une propriété de sortie vers le contrôleur de vue et le contrôleur de vue est créé dans la pointe.Quelle méthode d'initialisation est appelée dans une sous-classe UIViewController, lorsqu'elle est initialisée par une plume?

Althoug la méthode -viewDidLoad du contrôleur de vue obtient chargé, il semble qu'il initialiseur désigné reçoit aucun appel:

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { 
    NSLog(@"iniwinib"); 
    if (self = [super initWithNibName:nibName bundle:nibBundle]) { 
     // do stuff 
    } 
    return self; 
} 

J'ai aussi essayé avec -init, mais cela ne touchera pas non plus un appel. Pas de sortie NSLog. Y a-t-il un autre initialiseur que je dois utiliser dans ce cas?

Répondre

0

Appelez-vous effectivement initWithNibName pour créer votre ViewController quelque part dans le code? Si ce n'est pas le cas, il ne sera jamais appelé, cette méthode n'est pas appelée automatiquement, vous devez l'appeler pour créer votre viewController depuis votre plume. Mais vous n'avez pas besoin d'appeler cette méthode parce que vous avez déjà défini ViewController dans la plume.

+0

Comme vous l'avez dit, cela peut être très déroutant pour le lecteur. Il suggère que les objets qui sont stockés dans les NIB doivent également avoir initWithNibName: envoyé à eux. Ce n'est pas vrai. Les objets stockés dans les NIB ne doivent jamais être envoyés à initWithNibName :. Seuls les objets qui * possèdent * un NIB devraient l'avoir envoyé. –

+0

bien viewController est le seul objet avec initWithNibName intializer – Daniel

+0

Oui, et bien que les contrôleurs de vue puissent posséder des NIB, ils peuvent également être stockés dans des NIB. Lorsque vous placez un UIViewController (ou l'une de ses sous-classes) dans une NIB, vous ne devez pas l'envoyer initWithNibName :. Vous ne devez pas envoyer un initialiseur à un objet instancié NIB. –

9

-initWithCoder: est l'initialiseur dans ce cas (parce que l'objet est désérialisé de la NIB), mais la routine que vous voulez réellement voici -awakeFromNib. C'est ce qu'on appelle après que tous les objets dans le NIB ont été construits et que tous les points de vente ont été câblés.

Questions connexes