NSObjectController et les bindings

muqaddarmuqaddar Administrateur
février 2007 modifié dans API AppKit #1
Philippe49 a "pondu" un article très simple sur l'utilisation des Bindings avec NSObjectController.
Il le met à  disposition dans cet article (à  télécharger au format PDF).



[Fichier joint supprimé par l'administrateur]
«1

Réponses

  • aranaudaranaud Membre
    20:07 modifié #2
    Simple et claire.
    Que demander de mieux.  :p
  • Philippe49Philippe49 Membre
    20:07 modifié #3
    NDLR :

    Plutôt NSObjectController et bindings, le tuto de clic-cool étant déjà  tout à  fait satisfaisant sur le sujet des NSArrayController
  • tabliertablier Membre
    20:07 modifié #4
    Petit problème: je ne peux pas lire le PDF. Erreur: XObject introuvable: FM3.
    J'ai fait une mise à  jour du Reader, le problème persiste!
    Quelqu'un a une idée?
  • Philippe49Philippe49 Membre
    20:07 modifié #5
    Le lien direct n'a pas l'air de fonctionner effectivement.

    Suivre
    consulter les articles
    puis  fichiers
  • 20:07 modifié #6

    Super tutoriel !

    Dommage qu'il n'y en a pas plus de ce genre, pratique pour apprendre ...

    Par contre je sèche à  un endroit ... Page 8, page 9.

    Je vous remet ces 2 pages en fichier joint et, j'ai donc crée cette nouvelle classe que l'on nomme CelsiusToFarenheitTransformer, mais après je ne comprend plus:

    - Comment en faire une sous classe de NSValueTransformer? avec
    @interface CelsiustoFarenheitTransformer : NSValue ()
    
    ?

    - Mais ou dois je coder le contenu de la page 9? dans quelle classe?

    Merci.
  • ClicCoolClicCool Membre
    20:07 modifié #7
    dans 1201709569:

    - Comment en faire une sous classe de NSValueTransformer? avec
    @interface CelsiustoFarenheitTransformer : NSValue ()
    
    ?

    - Mais ou dois je coder le contenu de la page 9? dans quelle classe?

    Merci.


    Salut bodysoulspirit,

    Pour créer une sous classe il faut créer
    - un descriptif de celle-ci (avec le NOM des classe parente, variables d'instances, méthodes de classes et méthodes d'instances) que l'on met classiquement dans en fichier d'interface type header en .h
    - Le code correspondant qe l'on mets classiquement dans un fichier d'implémentation en .m

    Par chance xCode facilite un peu le travail.

    Dans xCode, choisi menu File -> new File ...
    La fenêtre Assistant apparaà®t alors
    Choisi ici Cocoa -> Objective C Class
    Donne lui le nom de ton transformer (ici ce serait CelsiusToFarenheitTransformer) et valide

    2 fichiers sont ajoutés à  ton projet.

    Ouvres le Header en .H ( ici CelsiusToFarenheitTransformer.h) Remplace juste NSObject par NSTransformer
    Ton transformer hérite de NSTransformer et c'est du reste la seule chose que dise ton fichier d'implémentation car
    - Pas de variables d'instances à  déclarer
    - Pas de méthodes nouvelles propre à  ta nouvelle classe à  déclarer (les descriptions des Méthodes déclarées par NSTranformer dans NSTranformer.h seront héritées et suffisent ici)

    Ouvres maintenant le fichier d'implémentation ( ici CelsiusToFarenheitTransformer.m) pour y taper le code propre à  l'implémentation de ta nouvelle classe (le code que l'on a sur la page 9)
    Il y a là  le code d'implémentation de ta classe pour les méthodes déclarées dans sa superclasse.
    Précisément Deux méthode de classe ( avec un + devant) et Deux méthodes d'instances (avec un - devant)

    Et voilà  ! tu viens de créer ta première sous-classe perso :)

    @+


  • 20:07 modifié #8

    Mmm, merci.

    Mais bon, je t'avoue que, après 3 jours de documentation cocoa sur le ADC apple + 2 jours a faire des tutoriels, je t'avoue que j'ai encore du mal à  bien comprendre ce qu'est une la grande différence entre une classe, une méthode, un contrôleur, le fichier .h, le .m ...

    P*****, le jour où je comprend tout ca je me lance dans un tutoriel hyper simple ...

    Ou alors c'est moi qui suis con tiens, ça j'y avait jamais pensé ... Ou alors parce que je suis belge ... ou les deux ... :(renaud):

    +
  • Philippe49Philippe49 Membre
    20:07 modifié #9
    dans 1201715452:

    Mais bon, je t'avoue que, après 3 jours de documentation cocoa sur le ADC apple + 2 jours a faire des tutoriels, je t'avoue que j'ai encore du mal à  bien comprendre ce qu'est une la grande différence entre une classe, une méthode, un contrôleur, le fichier .h, le .m ...


    Il faut dire que cela est très riche ...
    Tu as lu un bouquin comme celui d'Aaaron Hillegass  ? Il date un peu, et depuis son édition il y a eu des évolutions, mais il est vraiment très bien fait à  mon avis, fixant un certain nombre de bases qui restent toujours d'actualité.
  • AliGatorAliGator Membre, Modérateur
    20:07 modifié #10
    dans 1201715452:

    Mais bon, je t'avoue que, après 3 jours de documentation cocoa sur le ADC apple + 2 jours a faire des tutoriels, je t'avoue que j'ai encore du mal à  bien comprendre ce qu'est une la grande différence entre une classe, une méthode, un contrôleur, le fichier .h, le .m ...
    Petit résumé rapido, en vrac :

    - Méthode : c'est une fonction associée à  une classe, et qui est disponible alors pour cette classe (ou plus précisément les objets qui sont des instances de cette classe) et ses sous-classes éventuelles.
    - Classe : sorte de "modèle" servant à  créer des objets. On dit qu'on instancie une classe C, ou que l'on crée une instance O de la classe C, lorsque l'on crée un objet O en se basant sur le "modèle" défini dans la classe C.
    - Variable d'instance : c'est une variable associée à  une classe. Chaque instance de la classe possède alors les variables définies dans la classe. Chaque instance différente peut posséder des valeurs distinctes dans ces variables.

    Exemple : on peut avoir une classe "Voiture" qui contient 3 méthodes "démarrer", "arreter" et "klaxonner", et 3 variables d'instance "marque", "couleur" et "immatriculation".
    --> On peut alors créer 3 voitures distinctes (on a expliqué plus haut à  notre programme, grace à  la classe "Voiture" justement, ce que l'on appelais de manière générale une "voiture", de quoi elle était composée (variables d'instance) et ce qu'elle savait faire (ses méthodes). Chacune des 3 voitures, donc des trois objets qui seront des instances de la classe "Voiture", auront chacune une couleur, une plaque d'immatriculation et une marque (qui pourront être différentes pour les 3, genre une Renault rouge, une Seat verte et une Peugeot bleue). Et chaque voiture saura comment démarrer, s'arrêter et klaxonner.

    - Contrôlleur : sorte particulière de classe (ou d'objet, selon le contexte, on parle "du/des contrôlleur(s)" (objet(s)) ou de la classe contrôlleur) qui est dédiée à  faire communiquer l'interface (ton IHM créée avec InterfaceBuilder) et ton modèle (représentation interne de tes données).

    - Fichier ".h" et ".m" : pour définir une classe, cela se fait en 2 parties. D'abord on la décrit, on dit qu'on fait sa déclaration, donc on ne fait que lister ses méthodes et ses variables d'instance, ce qui se fait dans un fichier à  l'extension ".h". Ensuite on la définit, c'est à  dire que pour chaque méthode de la classe, on détaille son code. Ceci se fait dans le ".m".

    --> Donc dans "Voiture.h" on va juste dire qu'une voiture a une marque, une couleur, une immatriculation, et 3 méthodes (et donner leur signature respective, c'est à  dire leur nom, le type de leurs paramètres et le type de donnée qu'elle retourne). Et dans "Voiture.m" on va écrire le code de chacune des méthodes "démarrer", "arrêter" et "klaxonner".

    Le ".h", donc "l'interface", permet de dire à  celui qui le lit "je t'informe de ce que sait faire une voiture. T'as pas besoin de savoir comment elle se démerde pour démarrer ou s'arrêter ou klaxonner, je te dis juste qu'elle sait le faire". Le ".m" est là  pour coder, mais celui qui ne fait qu'utiliser la classe "Voiture" une fois qu'elle sera au point n'a pas besoin d'aller lire le ".m".
    Ainsi tous les "trucs tout faits" (librairies et frameworks, en gros un ensemble de classes toutes prêtes à  l'emploi) ne fournissent que les ".h" pour l'utilisateur final, qui ne voit pas le code du ".m" (déjà  compilé dans la librairie). Tu peux lire les fichiers "NSNumber.h" pour savoir ce que sait faire un NSNumber, mais t'as pas à  savoir comment à  l'intérieur Apple s'est démerdé pour coder ça, du moment que tu sais les méthodes disponibles et ce qu'elles sont sensé faire.
  • ClicCoolClicCool Membre
    20:07 modifié #11
    dans 1201736832:

    dans 1201715452:

    - Méthode : c'est une fonction associée à  une classe, et qui est disponible alors pour cette classe (ou plus précisément les objets qui sont des instances de cette classe) et ses sous-classes éventuelles. ../...


    Coucou Ali :)

    Personellement je n'aurait pas ajouté la parenthèse. C'est pô bien comme ça.


    + arrayWithObject: par exemple, comme toutes les méthodes préfixées par +, est bel et bien une méthode de Classe

    – initWithObjects: par contre, comme toutes les méthodes préfixées par -, est bien une méthode de d'instance de la Classe


    ::)
    BN



  • AliGatorAliGator Membre, Modérateur
    20:07 modifié #12
    Exact, merci pour cette précision mon pingouin adoré.
    J'ai hâtivement décrit dans "méthodes" uniquement les méthodes d'instance sans décrire les méthodes de classe.

    - Une méthode d'instance est une méthode disponible pour chaque instance de la classe. Elle dépend potentiellement de l'objet (l'instance) sur laquelle elle s'applique, et on l'appelle "sur l'objet", en demandant à  une instance O de notre classe de répondre à  cette méthode. Par exemple une méthode "afficheCouleur" de ma classe "Voiture" doit être une méthode d'instance, car ça n'affichera pas la même chose selon la voiture, chaque voiture pouvant avoir une couleur différente (c'est pour ça qu'on précise à  quelle voiture on envoie le message, ie. sur quelle voiture on appelle la méthode).

    - Une méthode de classe est une méthode que l'on appelle sur la classe elle-même. Elle ne peut alors pas dépendre des variables d'instances (non "static") dont les valeurs sont potentiellement différentes entre deux instances de la même classe. C'est pour ça que la méthode "afficheCouleur" ne peut pas être une méthode de classe, il faut savoir de quelle voiture précisément on veut la couleur. Par contre on peut demander le nombre de roues, qui ne dépend pas de l'objet sur lequel on appelle la méthode. En gros ça revient à  poser la question "tiens, combien une voiture, quelle qu'elle soit, possède-t-elle de roues ?".... et on a même pas besoin d'avoir créé une voiture (donc d'avoir une instance de la classe Voiture) pour avoir la réponse, on pose la question à  la classe pas à  une instance !

    Voilà  voilà .

    PS/PJ : ClicCool, n'oublie pas la lumière des chiottes. :brule:
  • 20:07 modifié #13
    dans 1201715452:
    Ou alors parce que je suis belge ...


    Ne t'inquiète pas, ça se soigne.
  • BruBru Membre
    20:07 modifié #14
    dans 1201747132:

    dans 1201715452:
    Ou alors parce que je suis belge ...

    Ne t'inquiète pas, ça se soigne.


    Il a commencé sa thérapie...
    Quoiqu'il n'a pas choisi le meilleur lieu : d'après son profil, il est en Alsace, la pire région de France (après le Nord, bien sûr) !

    .
  • 20:07 modifié #15

    Eh ben Aligator, ça c'est sympa, une petite explication pas anglophone ! Merci.

    Il a commencé sa thérapie...
    Quoiqu'il n'a pas choisi le meilleur lieu : d'après son profil, il est en Alsace, la pire région de France (après le Nord, bien sûr) !


    Merde alors, je me suis encore fait avoir... :) Pourquoi c'est pas bien l'Alsace ? Il pleut autant à  Colmar qu'a Marseille, sans la plage quoi ... En tout cas, c'est toujours mieux que la Balgique où il pleut tout le temps sur les vaches... Je restait en Belgique je me flinguait moi !

    Non, la France est vraiment le plus beau pays, heureusement que Dieu a crée les français pour équilibrer un peu avec les autres pays :)
  • ClicCoolClicCool Membre
    20:07 modifié #16
    dans 1201769223:
    Il pleut autant à  Colmar qu'a Marseille, sans la plage quoi ...


    Quelqu'un me cherche là  ?
    Fait Gaffes à  l'expulsion !
    C'est dans la charte du forum (ou si ça y est pas c'est qu'elle est mal faite): on touche pas à  Marseille SVP


  • Philippe49Philippe49 Membre
    20:07 modifié #17
    dans 1201769223:

    heureusement que Dieu a crée les français pour équilibrer un peu avec les autres pays :)


    Il est sympa ce gars là   :p :p :p :p


    Ceci dit, pas pour dire, contradiction interdite,  >:D rien ne vaut l'Anjou et le coteau du Layon
  • 20:07 modifié #18

    Je connaissait pas le le coteau de Layon ...


  • ClicCoolClicCool Membre
    20:07 modifié #19
    dans 1201770684:
    Je connaissait pas le le coteau de Layon ...


    Tu perds rien, beaucoup trop sucré à  mon goût  >:D

    Et ça vaut pas une bonne soupe 15 de Marseille  :fouf):
  • 20:07 modifié #20

    http://www.layon.org/  :o :o :o

    ClicCool, tu sais comment on reconnaà®t une vielle Lada ?



    rép: Il y a un autocollant "Marseille champion" collé à  l'arrière...  :)
  • Philippe49Philippe49 Membre
    janvier 2008 modifié #21
    dans 1201770684:

    Je connaissait pas le le coteau de Layon ...

    du layon
    C'est une sorte de vin blanc comme le Jurançon, le Sauternes, ... idéal avec foie gras, en apéritif, au dessert ... Il y a une version encore plus subtile mais très locale, le Coteau de l'Aubance, avec des arômes de fruits secs.
    Bon mais là -bas en Alsace, il y a de quoi faire aussi non ? on y a tous de beaux souvenirs ...

    dans 1201771084:

    Tu perds rien, beaucoup trop sucré à  mon goût  >:D


    Meuh non, il faut le prendre de qualité, et le servir à  bonne température, i.e quasi frappé.
    C'est comme les vins d'Alsace, il faut bien les choisir ...

    dans 1201771084:

    Et ça vaut pas une bonne soupe 15 de Marseille  :fouf):

    Ah oui évidemment, je m'incline

  • Philippe49Philippe49 Membre
    20:07 modifié #22
    dans 1201771413:


    rép: Il y a un autocollant "Marseille champion" collé à  l'arrière...  :)



    Euh là , il va faire mauvais temps ...
    attendons la réponse de Clic Cool
  • 20:07 modifié #23

    Oui, c'est clair qu'il la pas encore vu ...

    Je profite de mes derniers instants sur ce forum ... Je profite ...
  • ClicCoolClicCool Membre
    20:07 modifié #24
    dans 1201771413:

    ClicCool, tu sais comment on reconnaà®t une vielle Lada ?



    rép: Il y a un autocollant "Marseille champion" collé à  l'arrière...  :)


    Bien sur on en retrouve aussi dans les fouilles archéologiques des "Marseille Champion"
    ça fait tellement longtemps qu'on est champions.




    C'est pas comme ça qu'il fallait te lire ?

    Ici on raconte la même avec le PSG ;)
    Mais je me permettrais pas, les supporter du PSG ont forcément un grand coeur pour soutenir par pitié une telle équipe  :P
  • ClicCoolClicCool Membre
    20:07 modifié #25
    dans 1201771641:
    Je profite de mes derniers instants sur ce forum ... Je profite ...


    Pour l'instant tu profittes encore un peu de l'immunité des nouveaux à  qui on excuse les erreurs de jeunesse.

    Mais attention, on excuse mais on n'oublie pas !  >:D
  • 20:07 modifié #26
    Pour l'instant tu profittes encore un peu de l'immunité des nouveaux à  qui on excuse les erreurs de jeunesse.

    Mais attention, on excuse mais on n'oublie pas ! 


    Ah ben tu vois, ça c'est sympa !  Ma mère m'a toujours dit, depuis tout petit, "si tu te fait virer d'objective cocoa, tu ira garder les chèvres dans le Pyrénées et ramasser les crottes de chat"

    et de toi à  moi, j'ai vraiment pas envie d'aller garder les chèvres.
  • ClicCoolClicCool Membre
    20:07 modifié #27
    dans 1201772156:

    Pour l'instant tu profittes encore un peu de l'immunité des nouveaux à  qui on excuse les erreurs de jeunesse.

    Mais attention, on excuse mais on n'oublie pas ! 


    Ah ben tu vois, ça c'est sympa !   Ma mère m'a toujours dit, depuis tout petit, "si tu te fait virer d'objective cocoa, tu ira garder les chèvres dans le Pyrénées et ramasser les crottes de chat"

    et de toi à  moi, j'ai vraiment pas envie d'aller garder les chèvres.


    Ta maman est d'une grande sagesse.

    :)
  • janvier 2008 modifié #28
    Ta maman est d'une grande sagesse.



    Eh ben, un marseillais qui dit d'une mère belge qu'elle est la sagesse ... Eh ben ! Ca s'est pas rien !  :p :p :p :p :p
  • ClicCoolClicCool Membre
    20:07 modifié #29
    dans 1201772976:

    Eh ben, un marseillais qui dit d'une mère belge qu'elle est la sagesse ... Eh ben ! Ca s'est pas rien !  :p :p :p :p :p


    Ben tu sais, j'ai la chance, que dis-je ? le privilège !, d'en connaitre une de maman Belge.
    ET je t'assures qu'elle gagne à  être connue.
    C'est vrai que c'est peut être pas "la sagesse même" qui me vient forcément en premier à  l'esprit à  son sujet mais pas mal d'autres pensées affectueuses vont à  elle ;)


    .../...


    En y réfléchissant c'est vrai, qu'à  ce que je sais, elle est parfois, comment dire ?, dans les airs.
    Mais tant que chaque décollage est suivi d'un attérissage sans bobos tout va pour le mieux :)



    :p à  la tiennes Bodysoulspirit  :p

    PS: T'as remarqué ? J'ai mis une Majuscule !
  • 20:07 modifié #30
    En y réfléchissant c'est vrai, qu'à  ce que je sais, elle est parfois, comment dire ?, dans les airs.
    Mais tant que chaque décollage est suivi d'un attérissage sans bobos tout va pour le mieux



      à  la tiennes Bodysoulspirit 

    PS: T'as remarqué ? J'ai mis une Majuscule !


    On pourra pas dire que vous êtes pas sympa sur ce forum !

    :p à  toi, aux français et à  Steve jobs sans qui on serait sous Windows  :brule: !

  • AliGatorAliGator Membre, Modérateur
    20:07 modifié #31
    dans 1201771476:

    dans 1201770684:

    Je connaissait pas le le coteau de Layon ...

    du layon
    C'est une sorte de vin blanc comme le Jurançon, le Sauternes, ... idéal avec foie gras, en apéritif, au dessert ... Il y a une version encore plus subtile mais très locale, le Coteau de l'Aubance, avec des arômes de fruits secs.
    Bon mais là -bas en Alsace, il y a de quoi faire aussi non ? on y a tous de beaux souvenirs ...

    dans 1201771084:

    Tu perds rien, beaucoup trop sucré à  mon goût  >:D


    Meuh non, il faut le prendre de qualité, et le servir à  bonne température, i.e quasi frappé.
    C'est comme les vins d'Alsace, il faut bien les choisir ...
    Ah, enfin un connaisseur :-)
    On l'aime notre petit coin d'anjou :-D (Bon ok maintenant je suis en Bretagne et je crache pas sur les crèpes et le cidre non plus, mais bon)


    dans 1201771476:

    dans 1201771084:

    Et ça vaut pas une bonne soupe 15 de Marseille  :fouf):

    Ah oui évidemment, je m'incline
    Bon en même temps on a aussi la soupe angevine, de notre côté, hein :-D
    (Mais bon c'est pas pour autant que je dénigre les spécialités marseillaises... y'a du bon à  prendre partout ;D)
Connectez-vous ou Inscrivez-vous pour répondre.