2010-03-21 20 views
1

J'ai mis en place comme XIB dans cette capture d'écran:-instancié est XIB nulle de l'objet IBOutlet

alt text http://emberapp.com/jxpx777/images/interface-builder/sizes/m.png

propriétaire du fichier est mon contrôleur de la fenêtre principale. Le XIB est également chargé de créer un objet qui sert de délégué pour la vue MGScopeBar. Comme vous pouvez le voir dans la capture d'écran, le délégué de la barre d'étendue a un IBOutlet pour le champ de recherche afin qu'il puisse le renvoyer en tant que vue supplémentaire dans le cadre du processus de délégation.

Le problème que j'ai est que lorsque l'objet délégué est interrogé pour la vue accessoire, le IBOutletNSSearchField est nul. Je suis à peu près certain que cela a quelque chose à voir avec l'ordre de création des objets, IBOutlets, etc, mais je suis juste un peu perdu quant à l'endroit où je peux espérer que le champ de recherche existe. délégué peut le référencer correctement.

Merci d'avance pour les pointeurs.

Répondre

6

Per Apple's documentation, il ressemble à tous les points de vente dans un NIB/XIB sont censés être câblés avant awakeFromNib est appelé sur un objet dans ce NIB/XIB, mais que les points probablement ne sont pas câblés lorsque init, etc. ., sont appelés sur les objets.

+1

Non "probablement" à ce sujet. Les prises sont définies via KVC (iPhone) ou un comportement très similaire à celui-ci (Mac). Cela ne peut arriver * qu'après que * l'objet a été alloué * et * initialisé. Pensez à la façon dont vous pourriez le faire si vous utilisiez le chargeur de plume; ce serait quelque chose comme: 'id instance = [[[objectClass alloc] initWithCoder: unarchiver] autorelease]; pour (NSString * k dans objectOutlets) [instance setValue: [objectOutlets objectForKey: k] forKey: k]; [instance awakeFromNib]; 'Notez que' initWithCoder: 'est retourné avant le début de la sortie; aucun point de vente n'est encore défini alors que 'initWithCoder:' est en cours d'exécution. –