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/
Appuyé sur 'NSTreeController'. C'est, pour reprendre une expression, un "sac de mal". – Alex