2009-10-24 2 views
2

J'essaie d'afficher un tableau de NSManagedObjects dans un NSTableView en utilisant un NSCell personnalisé qui est capable de dessiner l'objet géré correctement.Données de base, liaisons NSTableColumn et NSCell personnalisé

D'ailleurs, la colonne unique de mon NSTableView est liée au d'un NSArrayController. Je n'utilise aucun chemin de clé sur l'objet. J'avais l'impression que ma sous-classe NSCell recevrait un message setObjectValue: lorsque la vue de table voulait dessiner un élément particulier, mais cela ne se produit pas. Mais cela ne fonctionnerait même pas puisque les NSManagedObjects ne sont pas conformes au protocole Copying.

Je suppose que c'est une tâche courante et qu'il doit y avoir un moyen simple de le faire, mais je ne le vois vraiment pas maintenant.

Tout aperçu serait apprécié.

+0

Très semblable à cette autre question: http://stackoverflow.com/questions/409424/editable-nstableview-with-bindings-wont-set-values-in-model. –

Répondre

0

J'ai réussi à le faire fonctionner en liant la colonne de table avec le keypath objectID du modèle d'objet géré (qui est conforme à NSCopying). La cellule récupère alors le NSManagedObject réel en utilisant l'ID. Il fonctionne comme un charme!

3

Vous devez associer à une propriété spécifique des objets liés. Si vous avez vraiment besoin d'une cellule pour dessiner la valeur entière, alors vous devriez lier au objectID, comme le suggère Martin, mais au lieu de re-récupérer dans le code de dessin de la cellule, vous pouvez utiliser la méthode -tableView:willDisplayCell:forTableColumn:row: delegate pour définir l'objet comme valeur pour une propriété personnalisée de la cellule du contrôleur RAID, évitant à la fois la copie et la récupération.

Questions connexes