Un classe qui dirige plusieurs NSTableView

iShadowiShadow Membre
19:46 modifié dans API AppKit #1
Bonjour maà®tres développeurs!
Je voudrais savoir s'il est possible de faire en sorte qu'une classe soit le dataSource de plusieurs NSTableView devant afficher des données différentes n'ayant rien à  voir entre elles... (différents NSMutableArray)
Je cherche aussi a créer un accesseur d'un NSMutableArray, mais ca ne marche pas...
Je faisais :
<br />- (NSMutableArray *)getMutableArray<br />{<br />      return monMutableArray;<br />}<br />

Et ca plante... Sans doute une histoire de pointeur... Et je ne comprends rien aux coder/decoder et autres...
Brefs, si vous pouviez m'aider, ce serait simpa :)

Réponses

  • fouffouf Membre
    19:46 modifié #2
    Tout cela mérite une bonne explication.

    1° Un accesseur Objective-C s'écrit sous la forme - (NSMutableArray *)mutableArray (sans le get).

    2° Oui, tu peux faire qu'une classe soit le datasource de plusieures tableViews. Pour cela, il faut que tu prennes en compte l'argument aTableview des méthodes de datasource.

    3° C'est sympa et pas simpa :fouf): (c'est fou ce que l'orthographe des jeunes est mauvaise aujourd'hui  :P)

    J'espere que cela te sera utile. :)
  • 19:46 modifié #3
    Si ça plante, vérifie que tes tableaux ne soient pas créés avec des méthodes telles que [tt]+array[/tt]. Si tu ne l'as pas encore fait, je t'invite à  aller chercher dans la section "Annuaire" un article qui traite de la gestion de la mémoire.


    3° Tu fais des progrès cher fouf. Mais il y a encore 2 fautes qui traà®nent: plusieurs s'écrit sans "e" et espérer prend un accent grave à  la première personne.

  • iShadowiShadow Membre
    19:46 modifié #4
    dans 1119039146:

    1° Un accesseur Objective-C s'écrit sous la forme - (NSMutableArray *)mutableArray (sans le get).

    Euh, on peut nommer un accesseur comme on veut non ? Enfin, je veux dire que je peux l'appeller toto si je veux non ? lol
    Sinon, peux-tu être plus précis quant-à  la gestion de plusieurs dataSource ?
  • 19:46 modifié #5
    Tu peux les nommer comme tu veux, bien entendu, sauf si tu utilises le Key Value Coding, où là  la manière de le nommer est imposée. Mais par convention, le get est réservé à  un autre usage: lorsqu'on place un pointeur (float*, ou NSString** par exemple) comme argument et ce afin de récupérer une valeur.

    Pour gérer plusieurs datasource, il faut juste que tu crées autant d'instance qu'il n'y a de tables. En fait, il n'y a rien de vraiment particulier.
  • iShadowiShadow Membre
    19:46 modifié #6
    Oula... LOL, je suis trop nul... Je ne comprends pas très bien...
    Pour mon dataSource, j'ai implémenté les méthodes
    <br />- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex<br />
    

    et
    - (int)numberOfRowsInTableView:(NSTableView *)aTableView
    

    Je dois les écrire deux fois dans le code ? :o
  • juin 2005 modifié #7
    Ta classe datasource doit contenir un tableau (array par exemple) comme variable d'instance, qui alimente donc le datasource. Si tu as pour la 2° méthodes [tt]return [array count];[/tt], ce sera d'office bon, vu que chaque instance a un contenu (array) différent.

    [EDIT]Oups toutes mes excuses, je n'avais pas vu que tu voulais un datasource pour plusieurs tables, et non une classe datasource qui alimente plusieurs tables (avec une instance par table). Dans ce cas tu dois utiliser la table placée en argument et faire une compairison de pointeurs, par exemple

    [tt]- (int)numberOfRowsInTableView:(NSTableView *)aTableView {
        if ([aTableView == table1]) {
            return [array1 count];
        } else if ([aTableView == table2]) {
            return [array2 count];
        }
        return 0;
    }[/tt]

    Ou, autre possibilité, attribuer un tag différent pour chaque table, ce qui donne;

    [tt]- (int)numberOfRowsInTableView:(NSTableView *)aTableView {
        switch ([aTableView tag]) {
            case 1: return [array1 count];
            case 2: return [array2 count];
        }
        return 0;
    }[/tt]
  • iShadowiShadow Membre
    juin 2005 modifié #8
    J'ai fait comme tu m'as dit, mais une erreur survient :
    control reaches end of non-void function
    Bizzare... :)
    - (int)numberOfRowsInTableView:(NSTableView *)aTableView<br />{<br />	switch ([aTableView tag]) {<br />&nbsp; &nbsp; &nbsp; &nbsp; case 0: return [arrayDownload count];<br />&nbsp; &nbsp; &nbsp; &nbsp; case 1: return [downloadQueue count];<br />&nbsp; &nbsp; }<br />}
    
  • 19:46 modifié #9
    J'ai oublié de mettre un [tt]return 0;[/tt] (corrigé dans le texte). Sorry.
  • fouffouf Membre
    19:46 modifié #10
    dans 1119041268:

    Tu peux les nommer comme tu veux, bien entendu, sauf si tu utilises le Key Value Coding, où là  la manière de le nommer est imposée. Mais par convention, le get est réservé à  un autre usage: lorsqu'on place un pointeur (float*, ou NSString** par exemple) comme argument et ce afin de récupérer une valeur.


    Voila, Renaud t'as donné l'explication. Un petite précision : en Java, les accesseurs se notent bien avec get. Ceci explique peut-être cela.

    Pour, les "control reaches end of non-void function" que tu as l'air d'apprécier particulièrement  ;), le truc, c'est de rajouter le return "par défaut" dès la création de ta méthode. Voila, c'est un truc (inutile) comme un autre.  ???

    (Pas d'oubli d'accent, pas de fautes d'accord, Renaud ne regarde pas, c'est bon, je peux poster)  :P
  • iShadowiShadow Membre
    juin 2005 modifié #11
    Merci pour tout, j'essaye de suite o:)

    [EDIT] : et ça marche... Merci les gars  :adios!:
  • 19:46 modifié #12
    dans 1119083683:
    (Pas d'oubli d'accent, pas de fautes d'accord, Renaud ne regarde pas, c'est bon, je peux poster)  :P


    Si si, il y en a encore (au moins 3). Il faudrait passer à  la modération à  postériori pour toi. On ne va quand même pas laisser de telles horreurs sur le site...
Connectez-vous ou Inscrivez-vous pour répondre.