Xcode 4 et l'éditeur Assistant
Neofelis
Membre
Bonjour,
Utilisez-vous l'éditeur Assistant dans Xcode 4 ? Pour le moment je ne m'en servais pas mais je viens de découvrir qu'il était par exemple possible de créer des Outlets ou des Actions directement en maintenant CTRL + glisser déposer dans la fenêtre de code !
Par contre petite question : Dans une application test j'ai créé une Outlet dans une vue (donc une classe héritée de NSView) manuellement. Je voulais donc recommencer en utilisant le drag and drop directement dans le code mais pour une raison que j'ignore Xcode ne me popose pas de créer une Outlet dans le header de ma vue, par contre cela marche lorsque j'essaye dans le fichier (monProjet)AppDelegate.h...
Quelqu'un aurait une explication ? (Si vous avez besoin de plus de détail pour comprendre mon problème faites-le moi savoir).
Merci
Utilisez-vous l'éditeur Assistant dans Xcode 4 ? Pour le moment je ne m'en servais pas mais je viens de découvrir qu'il était par exemple possible de créer des Outlets ou des Actions directement en maintenant CTRL + glisser déposer dans la fenêtre de code !
Par contre petite question : Dans une application test j'ai créé une Outlet dans une vue (donc une classe héritée de NSView) manuellement. Je voulais donc recommencer en utilisant le drag and drop directement dans le code mais pour une raison que j'ignore Xcode ne me popose pas de créer une Outlet dans le header de ma vue, par contre cela marche lorsque j'essaye dans le fichier (monProjet)AppDelegate.h...
Quelqu'un aurait une explication ? (Si vous avez besoin de plus de détail pour comprendre mon problème faites-le moi savoir).
Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Oui ok il fallait ajouter un NSObject (le cube bleu) et lui mettre la classe de ma vue, ensuite ça fonctionne merci
Par contre si je peux ajouter un outlet, j'ai l'impression que la connexion ne se fait pas correctement. Je détaille mon cas.
A gauche j'ai mon xib et à droite le .h de ma classe de vue (appelons là "myView").
Dans mon xib j'ai une checkbox et une vue, je souhaite donc ajouter un outlet référençant ma checkbox dans ma vue.
Pour ce faire, je drag ma checkbox dans l'interface de ma vue qui créé une variable d'instance IBOutlet NSButton (que j'appelle "myCheckbox" disons). Je clique sur "Connect" pour valider.
Là je retourne sur mon xib, je fais un clic droit sur ma checkbox : je vois bien dans "Referencing Outlets" la connexion "MyCheckbox <=> MyView". Jusque là tout va bien, ensuite je regarde sur "MyView" toujours dans mon xib, clic droit et je vois l'outlet "MyCheckbox" non connecté. C'est ce que je ne comprends pas...
Une dans la fenêtre et une autre, au Top Niveau ( = à côté de la fenêtre), qui seront chargées toutes les deux quand le .xib sera desarchivé.
Si tu veux connecter un outlet à ta MaView *maView de la fenêtre tu dois partir de maView pour conclure dans myCheckBox. A l'ancienne
Enlève l'objet générique du xib pour y voir plus clair: tu ne pourras plus faire ta connexion dans le .h !
De toutes façons il n' était là que pour un "tourne autour" de la création d'un IBOutlet dans une classe sans avoir à entrer soi même le code : un clic droit sur maView te montre que tu as réussi ..
Je ne comprends pas pourquoi tu dis par exemple que j'ai 2 instances de MyView, moi je n'en vois qu'une...
EDIT : je crois que je viens de comprendre, j'ai 2 instances parce que j'ai ajouté une vue manuellement (le cube bleu) en plus de celle que j'ai dans mon interface...
As-tu déjà entendu parlé du MVC ?
Note qu'il faut 1) donner la valeur dans au modèle puis 2) la relire pour permettre la validation de la valeur.
Où je veux en venir est que par ce principe, seuls les Contrôleurs possèdent des outlets.
Revenons à ton cas. Si par exemple ta vue FlowersView sert à afficher des fleurs, et que tu as une checkbox "Afficher les fleurs bleues", alors FlowersView ne doit pas posséder une outlet vers la checkbox, mais le contrôleur doit avoir une outlet sur la FlowersView et recevoir l'action de la checkbox et modifier 1) le modèle qui possède une propriété "Fleurs bleues visibles" et 2) la propriété "Fleurs bleues visibles" de FlowersView.
Exemple d'un fichier h de l'appli en question :
Qu'en pensez-vous ?
Dans l'exemple de Hillegass, il a clairement fait cela pour permettre de connecter directement un article de menu. Ceci dit, il prend à mon sens un raccourci de conception: certes ce sont les vues qui dessinent dans un contexte graphique PDF, mais enregistrer les données n'est absolument pas de leur ressort. Le livre d'Hillegass est très bien, mais il ne donne pas toujours de bons exemples en termes d'architecture, ne serait-ce que par soucis de concision.
Il y a au moins une raison qui justifie les actions sur les vues: NSView hérite de NSResponder. Sans entrer dans les détails de la chaà®ne des répondeurs, c'est ce mécanisme qui permet de faire en sorte que lorsqu'on sélectionne l'article de menu Copier, la commande opère sur la sélection courante. L'article Copier n'ayant pas de cible (nul-targeted action), la chaà®ne des répondeurs va être parcourue jusqu'à trouver un répondeur répondant à l'action copy:. C'est ce qui permet à NSTextField de copier directement son contenu dans le Presse-Papier sans intervention du contrôleur (si je ne me trompe pas).
Mais que penser de l'outlet menu incorporé à chaque NSView ?
Ce n'est pas si répandu qu'on doive pouvoir en disposer partout, une propriété ferait aussi bien l'affaire, surtout avec les bindings qu'on a maintenant..
Une relique de l'ancien temps destinée à être bientôt marquée deprecated ?