Init des données dans la classe NSArrayController

aranaudaranaud Membre
18:52 modifié dans API AppKit #1
Je n'arrive pas à  trouver la méthode pour initialiser les données pour la classe NSArrayController.

Réponses

  • BruBru Membre
    18:52 modifié #2
    Est ce que ton objet NSArrayController a été instancié à  partir de Interface Builder (c'est à  dire que tu as déposé l'icône NSArrayController de la palette vers MainMenu.nib) ?

    Si c'est oui, alors tu peux utiliser la méthode awakeFromNib pour y placer du code d'initialisation.

    .
  • aranaudaranaud Membre
    18:52 modifié #3
    Oui, j'ai bien déplacé l'icône.

    Le problème est qu'aucune valeur ne s'affiche dans le tableau qui y est lié.

    J'ai utilisé la méthode : setContent  pour tenter de charger un objet NSArray.

    Le nombre de ligne est OK, mais les valeurs reste vide.


    Pour information, j'ai lu les deux articles qui en parlent sur le site ainsi que l?article sur liaisons cocoa dû site Project Omega.

    Mais je n'ai pas vu l'endroit où il faut faire l'init de l'objet avec des données ou je n'ai rien compris.

    Nota : je ne pense pas que le problème vienne de l'interface car je me suis appuyé sur un exemple (liaisons cocoa).
  • TiffTiff Membre
    18:52 modifié #4
    Faudrait en dire un peu plus sur les classes utilisées.
    Il y a quelque temps, dans mon AppController, j'avais tapé :
    [popUpController addObjects:[NSArray arrayWithObjects:<br />                @&quot;lundi&quot;, @&quot;mardi&quot;, @&quot;mercredi&quot;, @&quot;jeudi&quot;, @&quot;vendredi&quot;, @&quot;samedi&quot;, @&quot;dimanche&quot;, nil]]
    

    où popUpController est de classe NSArrayController.

    Sinon, on peut tout faire dans I.B. mais il faut utiliser un NSObjectController qui fait le lien entre le NSArrayController et le AppController.
  • TiffTiff Membre
    18:52 modifié #5
    Faudrait en dire un peu plus sur les classes utilisées.
    Il y a quelque temps, dans mon AppController, j'avais tapé :
    [popUpController addObjects:[NSArray arrayWithObjects:<br />                @&quot;lundi&quot;, @&quot;mardi&quot;, @&quot;mercredi&quot;, @&quot;jeudi&quot;, @&quot;vendredi&quot;, @&quot;samedi&quot;, @&quot;dimanche&quot;, nil]]
    

    où popUpController est de classe NSArrayController.

    Sinon, on peut tout faire dans I.B. mais il faut utiliser un NSObjectController qui fait le lien entre le NSArrayController et le AppController.
  • ClicCoolClicCool Membre
    18:52 modifié #6
    tiens ?
    Tu radotes Tiff ? ;D
  • TiffTiff Membre
    18:52 modifié #7
    Il faut vraiment le vouloir pour se connecter au site, en début de soirée ! À force de cliquer partout, deux messages pour le prix d'un. Et impossible de les modifier.

    J'en profite pour te rendre hommage. o:)
    Le code ci-dessus vient de chez ClicCool  o:)

    Sinon, je n'ai pas tout compris au problème de aranaud. Et toi ?
  • ClicCoolClicCool Membre
    18:52 modifié #8
    Salut Tiff ;)

    Ben on manque un peu d'infos pour l'aider mieux sur ce coup là .

    Si le nombre de lignes est OK c'est peut être que le tableau utilisé comme content répond correctement à  count mais pas aux autres accesseurs indéxés ?  :-\
  • TiffTiff Membre
    18:52 modifié #9
    Ben oui, bizarre. La liaison a l'air bonne, mais pas les clefs ?
  • 18:52 modifié #10
    arenaud, peux tu nous fournir le nom des clés définies dans tes bindings et le noms des méthodes "accessors" (si possible un copier-coller pour être sûr d'avoir exactement les bonnes valeurs) ?

    Pour info, n'oublie que si la clé est: "maCle" ou "_maCle"
    alors les "accessors" doivent être "setMaCle" et "maCle"
  • aranaudaranaud Membre
    18:52 modifié #11
    J'ai essayé avec (une classe perso enfant NSObject) ou sans (NSMutableDictionary) les accesseurs. Le résultat est toujours pareil.

    Je sais à  charger un NSArray avec des NSDictionary à  l'intérieur qui contient les données.
    Que les clés soient identiques ou non, le résultat est idem.

    Le but est de gérer une partie de l'interface (un tableau et des NStextField) avec les Bindings utilisant comme classe de contrôle NSArrayController.

    Les liens dans l'interface sont Ok, la modification d'une valeur dans un NStextField est immédiatement répercutée dans le tableau.

    Si vous voulez voir le fenêtre sur laquelle je conte l'utilisée, c'est pour mon application (http://aranaud.farge.free.fr/), la fenêtre principale, pour le tableau opération.

    Le problème est que je n'arrive pas à  initialiser les valeurs.  :'(
  • TiffTiff Membre
    octobre 2004 modifié #12
    Je veux bien jeter un oeil à  ton projet. Je me suis fait plusieurs petites applis dans ton genre, avec bindings, sans avoir rencontré ce problème. Si ton code n'est pas top-secret, tu peux m'envoyer ton projet (sans le sous-dossier Build) ou le déposer en réponse. Sinon, pas facile de trouver le bug.
    [EDIT]
    Petite parenthèse, un site Mac (MacGé je crois) a fait de la pub pour un petit logiciel de budget, il était question d'un autre dans le sujet. J'ai testé les deux. Et bien si moi je suis un débutant, il y en a d'autres ! Je n'aurais jamais osé rendre publiques de telles applications. Alors bon courage Aranaud, il manque encore le petit logiciel de gestion de compte qui soit vraiment fonctionnel. Avec les bindings, ce ne doit pas être trop dur.
  • aranaudaranaud Membre
    18:52 modifié #13
    J'ai utilisé l'exemple qui se trouve dans un acticle sur le site Project Oméga : http://www.macdevcenter.com/mac/2004/04/06/examples/Bibliotecha.zip

    Le seul problème, s'est qui ont omis de dire comment charger ou récupérer les données.

  • muqaddarmuqaddar Administrateur
    18:52 modifié #14
    Tiff, oui j'ai vu celui cité sur MacGé, horriblement moche et non fonctionnel.

    Sinon, des logiciels de gestion de comptes, il en existe plein il me semble sur notre plateforme. Mais je n'ai pas d'adresses.

    Le tien est bien parti aranaud !
  • TiffTiff Membre
    18:52 modifié #15
    Ouais. Ben c'est pas un bon exemple pour ce que tu veux faire.
    Déjà  la classe Book ne sert strictement à  rien. Elle pourrait, et encore, s'il y avait des initialisations un peu spéciales peut-être. Ce n'est qu'un dictionnaire, alors ouste le Book, NSMutableDictionary est aussi bien, pas de code à  taper. Bon, les pros ne seront sans doute pas d'accord avec moi, mais dans un premier temps, inutile de s'embêter avec ça.

    Ensuite, pas de NSMutableArray *mesLivres dans MyDocument.h, donc impossible d'enregistrer les données dans un fichier.
    Sans parler d'enregistrement, dans MyDocument.m :
    <br />-(id)init {<br />self = [super init];<br />mesLivres=[[NSMutableArray alloc] init]; //ou initWithArray: uneListeDeLivres<br />return self;
    


    Et dans IB, il suffit de binder le contentArray de Book Controller à  File's Owner (qui n'est autre que MyDocument) via le Model Key Path mesLivres.

    Pour l'enregistrement, pas d'idée sur le moment, pour ce genre d'appli je n'utilise pas les NSDocument. Mais c'est assez simple.
  • aranaudaranaud Membre
    octobre 2004 modifié #16
    Merci pour vos encouragements.

    Je vais essayer en utilisant la classe NSMutableDictionary.

    Il me semble que soient les méthodes content et setContent qui faut que j'utilise.

    Edit :


    C'est bon, sa marche.

    Voici le lien pour avoir le code modifier : http://aranaud.farge.free.fr/telechargement/Bibliotecha 2.zip
    :spot:
  • TiffTiff Membre
    18:52 modifié #17
    ça marche.  :D

    M'enfin, bizarre ton histoire précédente du bon nombre lignes qui s'affichaient vides.
    Bon, ben, y a plus qu'à  compléter l'appli. On aura la version 1.0 quand ?  :sors:
Connectez-vous ou Inscrivez-vous pour répondre.