[Résolu]1 controlleur pour 2 NSTableView

UniXUniX Membre
septembre 2005 modifié dans API AppKit #1
Salut.

J'ai un objet qui est le controlleur pour 2 NSTableView située dans le même Nib.
Je suis en train d'écrire les méthodes de base pour fournir les données aux NSTableView.

Je pensait faire quelquechose du type :
- (int)numberOfRowsInTableView:(NSTableView *)tableView
{
    if(tableView == tableUne)
{//mon code pour la table 1}
    else
{//mon code pour la table 2}
}

tableUne et tableDeux sont des outlet vers les 2 NSTableView.

Mais ça ne marche pas, l'appli plante au lancement.

Il faut faire comment alors ?

Réponses

  • AntilogAntilog Membre
    16:49 modifié #2
    Je ne comprends pas pourquoi ça ne fonctionne pas, mais...

    Tu peux peut-être attribuer un Tag à  chaque NSTableView, et tester
    if ([tableView tag] == tagTableUne)...
  • fouffouf Membre
    16:49 modifié #3
    Il s'agit aussi peut-être du code contenu entre les accolades qui plante. N'hésite pas à  utiliser le debugger pour voir où cela plante ;)
  • UniXUniX Membre
    16:49 modifié #4
    Exactly !

    J'ai trouvé le problème.
    En fait, ma deuxième table affiche le contenu d'un tableau qui est une variable d'instance de la classe qu'affiche ma première table.
    Et si aucune ligne n'est sélectionnée dans la première table, le selectedRow renvoie -1. Et ça me faisait planter la méthode - (int)numberOfRowsInTableView:(NSTableView *)tableView de la deuxième table.

    Merci pour votre aide en tous cas.  :)

    Question subsidiaire : j'ai donc 2 tables. L'une affiche le contenu de la ligne sélectionnée dans l'autre (type iTunes qui affiche les chansons de la liste de lecture sélectionnée).

    Dans mon objet contrôleur, j'ai écrit les méthodes source pour les 2 tables. L'affichage de la première (l'équivalent des listes de lecture) ne pose aucun soucis, mais il n'y a rien qui s'affiche dans la deuxième (l'équivalent des chansons).

    Je me suis dit que c'est parcequ'il ne savait pas quoi afficher. Mais comment le lui dire ?
  • UniXUniX Membre
    16:49 modifié #5
    En fait il faut indiquer à  la 2ème table de mettre à  jour son contenu lorsque la sélection dans la 1ère change. J'ai donc mis mon Controller delegate de la 1ère table, et ajouté :
    - (void)tableViewSelectionDidChange:(NSNotification *)aNotification
    {
    [carteTable reloadData];
    }


    Maintenant c'est OK.
  • fouffouf Membre
    16:49 modifié #6
    Je tiens à  faire une remarque qui, pour une fois :P, pourrait être utile : tu pourrais utiliser les bindings. Comme ca, zou, pas de problèmes de dataSource. ;)
  • UniXUniX Membre
    16:49 modifié #7
    Et bien figures toi que j'utilisais les bindings pour tout ça (ça m'avait pris 1/2 heure pour tout mettre en place), mais pour la suite (gestion du drag & drop, classe NSTableView perso, ...) ça ne me posait que des problèmes !
    Je suis donc revenu à  une structure avec dataSource à  la mano (et là  j'ai mis 4 ou 5 heures pour que tout roule ...).
Connectez-vous ou Inscrivez-vous pour répondre.