Truc bizarre avec IB
chaps31
Membre
J'instancie un NSObjet dans un nib puis fixe la classe à une classe que j'ai créé, le but : faire exécuter un awakeFromNib, problème, la méthode awakeFromNib ne s'exécute pas... 2 questions :
- Peut-on au sein d'un même nib instancier plusieurs classes avec chacune un awakeFromNib, qui s'exécuteront tous ? J'avais 2 instances de classes dans mon nib, j'ai essayé de retirer la première ça ne change rien...
- Ma classe s'appelle "InterfacClient", et à a grande surprise lorsque IB instancie ma classe il l'appelle "Interfac Client", avec un espace... bizarre non ? Cela explique-t'il l'awakeFromNib non exécuté ? A quoi cela est-il dû ?
Merci encore
- Peut-on au sein d'un même nib instancier plusieurs classes avec chacune un awakeFromNib, qui s'exécuteront tous ? J'avais 2 instances de classes dans mon nib, j'ai essayé de retirer la première ça ne change rien...
- Ma classe s'appelle "InterfacClient", et à a grande surprise lorsque IB instancie ma classe il l'appelle "Interfac Client", avec un espace... bizarre non ? Cela explique-t'il l'awakeFromNib non exécuté ? A quoi cela est-il dû ?
Merci encore
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
PS : désolé de tant de question en ce moment mais rassurez-vous j'enregistre tout, comme il y a qques semaines de ça des infos sur les dictionary réutilisées aujourd'hui
Le awakeFromNib est automatiquement appelé une fois que le NIB est chargé et que tous les objets du NIB ont été instancié et toutes les connexions (outlets) réalisées. Alors tous les objets de ton NIB sont tous prêts, et il appelle le awakeFromNib de chaque instance créée (je veux dire il appelle pas le awakeFromNib au fur et à mesure qu'il crée les instances, au risque s'il faisait ça que le awakeFromNib d'un objet soit appelé et que dedans tu utilises une référence ou un outlet vers un autre objet de ton NIB qui lui ne serait pas encore prêt)
Non non pas bizarre du tout, IB essaye de donner automatiquement un nom (qui ne sert que pour l'affichage dans IB, on est bien d'accord, et n'ont aucune conséquence côté code) aux instances que tu places dans le NIB, en fonction du nom de la classe.
Si tu places un objet de ta classe perso AppController, il va nommer le cube bleu ainsi instancié dans IB "App Controller". Si tu places un objet de la classe NSArrayController dans ton NIB, il va afficher "Array Controller" comme nom pour cette instance dans IB. Il ajoute tout seul des espaces avant les majuscules pour séparer les mots, etc.
Mais rien ne t'empêche de modifier ces noms affichés (qui ne servent uniquement qu'à te retrouver dans tous tes objets IB, et n'ont aucun lien avec le code hein) en double-cliquant sur ces noms et en les appelant "toto1", "toto2", etc par exemple
Pour ton pb de awakeFromNib pas appelé, vérifie la signature de ta méthode peut-être : [tt]-(void)awakeFromNib { ...ton code... }[/tt]
Quand j'ai commencé mon projet je bouquinais le dernier livre trouvé sur Cocoa de Hillegass, je lisais un chapitre sur la localisation et j'ai créé 2 fichiers un French et un English dans mon MainNib, je ne suis pas allé plus loin et j'ai oublié par la suite ce test...
Sauf que IB m'ouvre le nib English et le compilo le NIB french !!!! D'ailleurs au passage s'il faut refaire toutes les fenêtre pour chaque langue... je ne vois pas l'utilité je pensais que pour les différentes langues les fenêtres seraient les mêmes (hormis les textes), mais peu importe la localisation n'est pas du tout d'actualité.
Merci encore et désolé pour cette bévue... Maintenant va quand même falloir que je me penche sur la localisation...
PS : ce n'est en aucun cas le compilateur qui va charger le .nib ; c'est un chargement dynamique !
Erreur du matin :
Quelqu'un a un traducteur ? Ca ne gêne en rien l'exécution de mon code, mais mon mac et moi on ne parle plus la même langue... :P
0x0F is 0000 1111 in binary, Ox10 is 0001 0000 in binary, so the IB windows that come with a style mask of 0x0F don't have 0x10 set. 0x10 is 'NSUtilityWindowMask' from NSPanel.h. If you make your window into a panel in IB by changing the custom class to 'NSPanel' you'll be able to uncheck the 'utility mask' option in the attributes inspector. IB 3.0 clears this bit for you when you downgrade a NSPanel to an NSWindow. Did you create this nib with IB 2.x initially and then downgrade an NSWindow to an NSPanel?
Mais cela n'est pas très clair car je n'ai pas de "utility mask" dans l'onglet attributes de l'inspecteur... Je cherche
Edit : Le moteur de recherche du forum n'a rien donné mais lorsque j'ai googlé mon erreur j'ai un lien vers une discussion sur objective-cocoa datant de 2006. Bon pas de solution dans ce post... Mais google plus efficace que le moteur de recherche interne au forum ? :P
Or les NSWindow ne peuvent pas avoir cet attribut. Les NSPanel, si.
T'as dû créer un NSPanel à la place d'une NSWindow quelque part.
Et le NSPanel avait l'attribut "Utility" coché...