NSTableView: modification du datasource

RocouRocou Membre
15:29 modifié dans API AppKit #1
Bonjour,

J'ai une question très basique: comment faire pour mettre à  jour un datasource lié à  une NSTableView en fonction des modifications réalisées par un utilisateur qui édite une cellule? Je pensais naà¯vement que c'était automatique mais non  :'(

Jusqu'à  présent, ne maitrisant pas toutes les caractéristiques d'une NSTableView j'ai rusé pour éviter cela mais cette fois, je ne peux pas y couper.

Réponses

  • AliGatorAliGator Membre, Modérateur
    juillet 2010 modifié #2
    Hello,

    Pour des explications plus détaillées sur le fonctionnement global des NSTableView, et donc mieux les comprendre et les maà®triser, je t'invite à  lire le Programming Guide dédié.

    Sinon, plusieurs sujets existent déjà  sur la toile traitant de ta question : Tuto NSTableView sur CocoaDev.

    En particulier, pour mettre à  jour ton modèle lorsque l'utilisateur modifie la valeur d'une cellule de ta tableview, il faut implémenter [tt]- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex[/tt]


    Sinon, une autre approche serait d'utiliser les bindings pour gérer ta table, qui permet de lier automatiquement ton modèle et ta vue (ça utilise le KVC et le KVO pour automatiquement informer le modèle quand la vue (et donc l'utilisateur) modifie une valeur, etc. (plus d'infos ici). Ca t'évite le "glue code" justement mais bon, c'est une autre façon de fonctionner donc bon après faut se mettre dans le bain quoi, faut rentrer dedans (une fois que tu maà®trises ça te gagne du temps, mais au début c'est pas trivial quoi)
  • RocouRocou Membre
    15:29 modifié #3
    dans 1278692215:

    Hello,

    Pour des explications plus détaillées sur le fonctionnement global des NSTableView, et donc mieux les comprendre et les maà®triser, je t'invite à  lire le Programming Guide dédié.

    Sinon, plusieurs sujets existent déjà  sur la toile traitant de ta question : Tuto NSTableView sur CocoaDev.

    En particulier, pour mettre à  jour ton modèle lorsque l'utilisateur modifie la valeur d'une cellule de ta tableview, il faut implémenter [tt]- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex[/tt]


    Sinon, une autre approche serait d'utiliser les bindings pour gérer ta table, qui permet de lier automatiquement ton modèle et ta vue (ça utilise le KVC et le KVO pour automatiquement informer le modèle quand la vue (et donc l'utilisateur) modifie une valeur, etc. (plus d'infos ici). Ca t'évite le "glue code" justement mais bon, c'est une autre façon de fonctionner donc bon après faut se mettre dans le bain quoi, faut rentrer dedans (une fois que tu maà®trises ça te gagne du temps, mais au début c'est pas trivial quoi)

    Merci je vais relire le lien que tu cites avec plus d'attention.

    Cela dit, je constate que mon code fonctionne sauf dans un cas: j'essaie de lire ou de mettre à  jour l'état d'un NSButtonCell (check box) sur une ligne de ma NSTableView. Quoique je fasse, le datasource concernant cette donnée n'est jamais modifié ou alors je ne sais pas l'interroger.
Connectez-vous ou Inscrivez-vous pour répondre.