2010-01-07 8 views
0

Resuld shout est un panneau de paramètres avec un OutlineView et des boutons "ajouter un élément", "ajouter un groupe" et "supprimer". Les boutons ajoutent des entrées à un NSOutlineView. Les données sont stockées dans un NSMutableDictionary (ou tout ce qui convient). Tri/DragDrop activé pour l'OutlineView.Cocoa - Quel est le meilleur moyen de modifier NSOutlineView

Quelle est la meilleure ou la plus facile pour cela (et écrire moins de code)?

Modifier NSMutableDictionary, NSOutlineView s'actualise à partir de NSMutableDictionary? Modification de NSOutlineView, le résultat est stocké dans NSMutableDictionary? ... NSTreeController? ... CoreData?

Quelle est la meilleure pratique pour cela?

Merci d'avance!

Répondre

1

Ceci est une question assez vaste. Vous devez toujours stocker vos données de modèle dans un objet de modèle quelconque, qu'il s'agisse d'une entité Core Data, d'un NSMutableDictionary ou d'un objet personnalisé de votre propre création. Vous ne devez certainement PAS stocker les données dans une instance NSTreeController ou NSOutlineView, ce ne sont pas des objets de modèle. Si vous utilisez des données de base pour le reste de votre application et que vous devez conserver les données manipulées en mode plan, il s'agit d'un bon choix, mais il peut être excessif si vous n'avez que des exigences simples.

Pour contrôler ce qui est affiché dans la vue générale, vous pouvez utiliser NSTreeController ou votre propre objet de contrôleur qui répond aux protocoles de source de données et de délégation NSOutlineView. En pratique, vous pouvez utiliser les deux, car certaines choses comme si un élément est un élément de groupe ne peut être contrôlé que par les méthodes déléguées NSOutlineView. Dans mon expérience personnelle, j'ai trouvé que NSTreeController peut être très difficile à gérer pour tout ce qui va au-delà des tâches très simples et je l'utilise maintenant, je trouve qu'il est beaucoup plus simple d'utiliser les méthodes de source de données dans mon propre contrôleur.

En ce qui concerne la modification du contenu de la vue générale, vous devez toujours modifier le modèle via un contrôleur, vous ne devez jamais mettre à jour directement la vue. Vous devez implémenter des méthodes telles que -add: dans votre contrôleur ou utiliser la méthode -add: de NSTreeController si vous l'utilisez.

Le contrôleur de votre vue doit alors détecter le changement dans le modèle et demander à la vue de se mettre à jour. Le contrôleur de vue et le contrôleur de modèle peuvent être le même objet mais ils ne doivent pas l'être. Key-Value Observer est une technologie utile qui peut informer votre contrôleur d'un changement dans le modèle.

Voici quelques exemples de code d'Apple que vous pourriez trouver utiles:

http://developer.apple.com/mac/library/samplecode/SourceView/

http://developer.apple.com/Mac/library/samplecode/AbstractTree/

+0

Appuyé sur 'NSTreeController'. C'est, pour reprendre une expression, un "sac de mal". – Alex

Questions connexes