2009-09-08 14 views
0

J'ai un NSTableView qui utilise l'objet contrôleur pour le NIB affiché comme source de données. J'implémente le protocole informel NSTableView.NSTableView n'augmente pas le nombre d'éléments dans la table?

Cette NSTableView obtient ses valeurs à partir des données de base. Je lance l'application, charge toutes les valeurs que j'ai en XML et les affiche ensuite.

Mon problème est, le NSTableView ne semble pas ajouter de nouvelles lignes à la fin de la table. Si je démarre l'application sans valeurs dans le stockage permanent et en ajoute un autre (l'ajout de valeurs fonctionne comme je peux le voir étant enregistré au format XML), la vue de table ignore simplement la nouvelle valeur.

Si j'ajoute une valeur que je sais aller à la fin de la table (le contenu est organisé par ordre alphabétique), je ne verrai pas la nouvelle valeur. Si je et une valeur que je sais n'ira pas à la fin de la table, la valeur sera ajoutée, je la verrai sur la table, mais la dernière valeur sur la table sera expulsée et disparaîtra .

J'ai remarqué que - (int) numberOfRowsInTableView: (NSTableView *) tv n'est appelé que lorsque l'application démarre et non quand je fais [tableView reloadData]. Qu'est-ce qui cause le déclenchement de cet événement? J'ai essayé de le déclencher à la main avant d'appeler reloadData sur tableView mais cela ne semble pas fonctionner.

Des idées sur ce qui pourrait être à l'origine de cela?

Est-ce que quelqu'un a rencontré quelque chose comme ça? Des indices sur ce qui pourrait être?

+1

La question que vous vous posez n'est pas claire: utilisez-vous des liaisons ou le protocole NSTableDataSource pour remplir NSTableView? Vous devez choisir l'un ou l'autre. Si vous utilisez des données de base, vous devez utiliser des liaisons. – Alex

+0

J'utilise le protocole NSTableDataSource. Je n'utilise pas de liaisons car j'ai besoin de faire de la magie avant d'afficher des données à l'écran. – ruipacheco

+0

Quelle est la magie? Je suppose que c'est plus le domaine d'une sous-classe NSValueTransformer ou l'un des jumeaux NSFormatter, mais je ne peux pas dire avec certitude sans savoir ce que vous faites. –

Répondre

0

Le commentaire d'Alex m'a fait examiner le code, en particulier les liaisons dans Interface Builder. Il s'avère que j'avais défini les liaisons entre la table et mon objet contrôleur et implémenté le NSTableDataSource.

J'ai supprimé toutes les liaisons et implémente uniquement le protocole NSTableDataSource.

+0

Je recommanderais d'aller dans l'autre sens. Les données de base et les liaisons sont conçues pour fonctionner ensemble. –