2

Je crée ma propre arborescence personnalisable. Pour cela, je voudrais observer NSTreeController pour les mises à jour de ses éléments 'to-many-relations. NSTreeController est lié au contexte d'objet géré CD. Chaque niveau de profondeur a sa propre entité CD avec les propriétés parent/children/isLeaf. Je dois maintenir la même hiérarchie dans la vue (et l'ordre des éléments enfants). Si quelque chose est inséré, je vais commencer à observer la propriété de ses enfants. Et j'ai besoin de connaître indexpath pour l'objet de cours nouvellement inséré.Observer les entités CoreData liées de NSTreeController pour insertion/suppression

Je voudrais savoir exactement ce qui a été inséré/retiré, donc je peux commencer à l'observer pour les insertions/retraits à ses enfants. Si je comprends bien, la manière standard de faire ceci est de chercher "change" NSDictionary à l'intérieur de observeValue: forKey ..., mais les changements sont NULL.

Je sais que c'est un bug de longue date mais y a-t-il une bonne solution de contournement pour cela? J'ai vu que les vues de certains exemples enregistrent des tableaux, puis lorsque le modèle change, vous comparez les différences. C'est plus compliqué pour treeview. De cette façon, gaspille également la mémoire et les cycles du processeur. J'ai une solution de contournement que je suis en train de tester. Ça fonctionne comme ça, donc je ne vais pas le décrire pour le moment.

+0

Avez-vous déjà trouvé une solution décente pour cela? Je rencontre beaucoup le même problème. –

Répondre

1

Que diriez-vous de sous-classer NSTreeController et d'implémenter ses méthodes d'insertion/suppression. Quelque chose comme ça par exemple.

- (void)insertObject:(id)object atArrangedObjectIndexPath:(NSIndexPath *)indexPath { 

     // ... code to update your object relationships .. 
     // ... Take care here if you update any variables in your model (eg a sortindex) that would trigger KVO in the NSTreeController. In those case you need to make the updates without triggering KVO by using setPrimitiveValue:forKey or get an infinite loop 

     [super insertObject:object atArrangedObjectIndexPath:indexPath]; 

} 
Questions connexes