2010-06-18 4 views
2

En essayant de déboguer pourquoi un contrôleur de vue est vide, je me suis retrouvé dans une sorte d'endroit étrange. Vérifiez cela:Pourquoi ce contrôleur de vue init ne? (N'IMPRIMEZ JAMAIS)

OffersSearchController *searchController = [[OffersSearchController alloc] 
     initWithNibName:@"This is a completely bogus nib name." 
      bundle:nil]; 

Pas une seule plainte. J'ai vu ce genre de construction s'écrouler avec des plaintes d'être incapable de trouver une plume nommée "Ceci est complètement faux ...", mais pas cette fois. Au lieu de cela, searchController appuie sur le contrôleur de navigation comme s'il avait été chargé avec succès. Il est vide, cependant - je peux voir l'écran en plein écran d'une autre vue qui est (accidentellement!) "En dessous" de ma pile UINavigationController.

Que se passe-t-il ici? Est-ce que [OffersSearchController alloc] revient à zéro pour une raison quelconque?

EDIT: Peu importe. Voici la leçon: n'implémentez pas loadView lorsque vous voulez implémenter viewDidLoad. Oy. Longue semaine

+2

Pourrait juste poster votre solution comme réponse et l'accepter. Pourrait rendre les choses un peu plus facile pour les autres qui pourraient trouver cette question sur google à l'avenir. –

Répondre

1

Voici la réponse (merci @Eric Petroelje pour avoir suggéré de poster et d'accepter la réponse). Dans une explosion de la productivité de fin de vendredi après-midi, se déplaçant beaucoup plus vite que recommandé, j'ai configuré mes initialiseurs de propriété et tableaux de source de données de picker-wheel dans -(void)loadView plutôt que dans -(void)viewDidLoad.

Plutôt que l'appel initWithNibName: de l'appel à loadView étant autorisé à se propager jusqu'à UIViewController, il a heureusement initialisé mes champs et c'est tout.

-2

The documentation for UIViewController initWithNibName:bundle ne dit rien de ce qui se passe si le nom de la plume n'est pas valide. Vraisemblablement, un nom de plume invalide est traité comme un nom nul. Cependant, il indique que la valeur de retour est toujours un UIViewController initialisé. Donc, ce que ce code fait est d'allouer/initialiser un nouveau OffersSearchController sans nib. La vue semble vide parce qu'elle l'est. Vous n'avez probablement jamais vu ce crash auparavant, parce que ce n'est pas censé le faire; ce qui se passe est parfaitement normal.

+0

Si vous indiquez un nom de plume invalide, l'application se bloque réellement – Daniel

Questions connexes