2010-05-29 5 views
1

J'essaie de remplir un NSVTableView à 2 colonnes via des liaisons, mais les données n'apparaissent pas dans la table.Exemple de liaison NSTableView simple

En XCode:

J'ai un NSMutableArray dans mon AppDelegate qui contiendra les données, ainsi que les @property et @synthesize correspondant.

Lors d'un événement, j'appelle [removeAllObjects] sur le NSMutableArray et le repeuple avec certains objets NSDictionary. Chaque dictionnaire contient 2 KVP: un nom et une valeur.

Dans IB:

J'ai ajouté une NSArrayController et lié son contenu à mon tableau AppDelegate et définissez le ModelKeyPath au nom du NSMutableArray dans le AppDelegate.

Sur NSTableView, j'ai lié le contenu au contrôleur de matrice. ControllerKey = "arrangedObjects", ModelKeyPath = vide.

Pour chacune des deux colonnes, j'ai lié la valeur à l'AppController et définir les ModelKeyPaths respectivement à NAME et VALUE. ControllerKey = "ArrangedObjects".


J'ai essayé plusieurs autres choses, comme l'utilisation d'un NSArray dans le délégué de l'application et de faire un nouveau chaque fois que je dois mettre à jour les valeurs. Il doit y avoir une toute petite chose que j'oublie. Qu'Est-ce que c'est?

jorj

Répondre

4

NSArrayController est pas différent d'un NSMutableArray en termes de stockage. Si vous pouvez utiliser quelque chose comme [[mutableArray firstObject] valueForKey:@"NAME"]; et récupérer la valeur dont vous avez besoin alors le contrôleur de tableau devrait être en mesure de vous fournir la valeur correcte et les liaisons devraient fonctionner si vous avez les bonnes connexions. Si, toutefois, la ligne de code mentionnée ci-dessus ne vous donne pas la valeur dont vous avez besoin, vous avez un problème différent. Il est difficile de dire avec certitude, mais je vais, pour l'instant, supposer que vous avez un tableau de dictionnaires qui ont tous les deux mêmes clés (appelons-les firstKey et secondKey). Ii supposera en outre que l'objectif est que la première colonne affiche toutes les valeurs pour firstKey et que la deuxième colonne indique les valeurs pour secondKey. Sous cette théorie le NSMutableArray dans votre AppDelegate reste la manière que vous avez décrite ci-dessus, vos liaisons, cependant, changeront un peu. Tout d'abord, assurez-vous que le fichier nib avec lequel vous travaillez a le propriétaire du fichier AppDelegate.

Ensuite, la matrice de contenu ArrayController doit être liée à File's Owner.mutableArray.

La liaison globale de la vue table n'est pas très importante car je n'ai eu aucun problème à lier les colonnes.

La valeur de la première colonne doit être liée à ArrayController.arrangedObjects.firstKey. La deuxième colonne est, bien sûr, la même sauf que le chemin de la clé du modèle est secondKey.

+0

J'ai tout exactement comme vous l'avez décrit. J'ai regardé un peu plus fort et j'ai découvert que j'initialisais "mutableArray" dans - (void) awakeFromNib. Lorsque j'ai déplacé cela (et l'ajout de certaines données de test) à - (id) init, j'ai vu les données de test dans la table.Quand j'appelle [mutableArray removeAllObjects] et que je le repeuple avec des données, dois-je appeler quelque chose pour dire au contrôleur de tableau de resynchroniser la table? Le jorj –

+0

le willChange ... et didChange ... l'ont fixé! Merci beaucoup! –