[Résolu] Où sont les IBOutlets de mon customViewController?

berfisberfis Membre
mai 2013 modifié dans API AppKit #1

Bonjour,


 


J'ai manqué une marche, mais laquelle?


 


- Je dérive NSViewController: DoorController, avec nib associé.


- Je déclare le File's Owner de ce nib comme étant DoorController.


- J'ajoute un @property (assign) IBOutlet NSLevelIndicator *gauge  à  ma classe.


 


... pas d'outlet "gauge" disponible dans l'inspecteur quand je clique-droite sur mon File's Owner.


 


ça devrait marcher pourtant. Je ne pige pas. On n'est pourtant pas lundi... ???


 


Réponses

  • berfisberfis Membre

    Euh... j'ajoute un cube bleu dans le nib, je le déclare comme étant un DoorController, et les outlets apparaissent.


    Du coup je clique-droite sur mon File's Owner... et les outlets apparaissent aussi!


     


    Je soumets à  Apple?


  • HerveHerve Membre

    NSViewController dérive de NSResponder et possède les méthodes liées aux évènements de la souris, mais il ne dérive pas de NSControl. Le problème vient de là  très certainement...   Tu peux réécrire la méthode "drawRect" d'un NSButton au besoin.


  • berfisberfis Membre

    Nan, nan... Rien n'empêche un viewController dérivé d'avoir des IBOutlets supplémentaires.


     


    Mettons que la vue principale (IBOutlet view prédéfini) contienne un bouton. Dans le nib créé par Xcode, je dois pouvoir exécuter une action en direction du File's Owner, qui est mon contrôleur dérivé, si ce File's Owner est déclaré dans IB comme contrôleur dérivé. Lors du chargement du nib, mon instance remplace ce "placeholder" qu'est le File's Owner.


     


    Surtout, je ne vois pas pourquoi IB refuse de reconnaà®tre mon contrôleur dérivé en tant que File's Owner tant que je n'ai pas ajouté un cube bleu (custom Object), déclaré comme contrôleur dérivé. Et que par la suite ça marche... et ça continue à  marcher même si je supprime le cube bleu. C'est ça qui me fait dire qu'il y a peut-être un bug (léger, temporaire mais déconcertant) dans Xcode...


  • laudemalaudema Membre
    mai 2013 modifié #5

    Peut être en lui mettant une variable d'instance IBOutlet du même type et du même nom la verrait il mieux (ou plus vite). Ne pas oublier non plus d'enregistrer le fichier. Xcode "parse" en temps réel et donc on voit les changements en temps réel aussi mais parfois il est un peu long. Essayer de faire un nettoyage (Menu Project->Clean) peut parfois aussi améliorer ce genre de comportement déconcertant de Xcode, ça m'est déjà  arrivé.


    Sinon je viens d'essayer chez moi sur un cas comme le tien avec MyView dans un nib dont le file owner est MyViewController > ajout d'une @property (assign)IBOutlet NSTextField *testField; => testField est présent dans les outlets de FileOwner du nib MyView.xib.


    Sans variable d'instance et sans enregistrer. Essaye peut être de faire un "Clean build" voire si ça améliore les choses, ou de fermer tout et tout rouvrir (jusqu'à  la session utilisateur si nécessaire).


    Des fois il vaut mieux repartir d'un bon pied, surtout quand on a beaucoup travaillé et modifié un projet.


  • berfisberfis Membre


    Peut être en lui mettant une variable d'instance IBOutlet du même type et du même nom la verrait il mieux (ou plus vite).




    Mmmh... En l'occurrence je crois que ce qui l'a troublé c'est que l'IBOutlet d'une classe dérivée pointait lui-même sur une classe dérivée. Pauvre Xcode. Je le ménagerai davantage à  l'avenir...


     


    A part ça merci pour ces conseils toujours utiles, on peut même ajouter "Relancer Xcode", cela m'a même été nécessaire une fois, ainsi que "Redémarrer" si vraiment on ne sait plus où on en est.


     


    Dernière chose à  propos du "Clean": il est nécessaire quand on bosse avec Core Data et qu'un utilitaire comme DropBox ou Cubby commence à  générer des conflits dans le fichier modèle ou même zappe les modifications -- pas évident à  détecter ce genre de choses...  :/

  • laudemalaudema Membre
    mai 2013 modifié #7

    Remarque ça reste Mac OS : un redémarrage suffit. Je connais un autre OS où la solution est parfois de ré-installer Windows ;), ça ne m'est jamais arrivé avec un Mac :D


Connectez-vous ou Inscrivez-vous pour répondre.