2011-05-28 4 views
3

Je travaille sur une application avec la cette interface (désolé la langue est le néerlandais): (. Y compris les quatre NSTextFields)liaisons NSTableView comment ajouter une ligne

http://www.flickr.com/photos/pluueer/5756159100/

La fonction Ajouter sous la NSTableView doit être déplacé vers une feuille un jour, mais pour l'instant c'est très bien. J'ai mis en place des liaisons selon un tutoriel (http://cocoadevcentral.com/articles/000080.php), mais le tutoriel ne fournit pas comment ajouter des lignes comme je le souhaite (ajoute juste une ligne vide vous devez éditer dans NSTableView).

J'ai une connexion entre le bouton 'Voeg toe' (Néerlandais pour 'Add') et le contrôleur Array. Mais après avoir cliqué sur je reçois le message:

2011-05-28 23:37:56.149 Hop Calc[4345:a0f] -[__NSPlaceholderDictionary initWithObjects:forKeys:]: number of objects (0) not equal to number of keys (4) 

Il est logique, parce que je ne l'ai pas quoi que ce soit pour ajouter des lignes mis en œuvre, mais je ne sais pas comment.

Répondre

5

"Ajouter une ligne à la table" est une mauvaise façon d'y penser. Votre table représente une collection et un contrôleur fournit les informations à la table, en assurant la médiation entre la table (vue) et la collection (modèle). Puisque vous avez mentionné les liaisons, la collection est probablement gérée par un NSArrayController. Vous souhaitez donc ajouter un nouvel objet (du type géré par votre contrôleur RAID) au tableau de contenu du contrôleur RAID.

Façon la plus simple: Connectez le bouton Ajouter à l'action -add: du NSArrayController. Cela va ajouter une ligne vide.

Si vous voulez plus de contrôle, connectez le bouton Ajouter à votre propre action personnalisée dans un contrôleur. Cette action créera une instance de tout ce qui est représenté par votre contrôleur de tableau, le préremplira (ou ce que vous voulez faire), puis, en utilisant une sortie qu'il contient pour votre NSArrayController, appellera la méthode -addObject: pour ajouter l'objet (l'éventuel appel à -rearrangeObjects pour que le contrôleur de tableau réorganise son contenu).

+0

Oui, je voulais dire le contrôleur de tableau :) J'ai réintroduit les méthodes que j'avais avant d'ajouter des liaisons. Je peux dire que les objets sont ajoutés au tableau, mais je n'arrive pas à forcer l'actualisation de TableView. Comment puis je faire ça? – Joran

+0

Comment ajoutez-vous les objets? Si vous les ajoutez directement au tableau de contenu (comme dans, n'utilisant pas les méthodes du contrôleur de tableau), vous le «faites derrière le contrôleur RAID» pour qu'il ne voie pas les mises à jour. N'ajoutez pas d'objets directement à la matrice contrôlée par le contrôleur de groupe; utilisez -addObject de NSArrayController: (et insert/remove associé) pour que le contrôleur de tableau "connaisse" son tableau de contenu modifié. –

+0

Autrement dit, "forcer un rafraîchissement de la vue de la table" n'est pas non plus la bonne façon d'y penser. La vue de la table sera notifiée par le contrôleur, comme il se doit, lorsqu'une modification se produit. –

Questions connexes