J'ai un NSTreeController dont le tableau est lié à une propriété "items" (custom) d'une sous-classe NSArrayController. Étant donné que le contrôleur d'arborescence n'est pas lié à la sélection de NSArrayController, je dois m'assurer que le contrôleur d'arborescence sait que les éléments doivent être récupérés après la modification de la sélection du contrôleur de matrice.NSTreeController KVO numéro
Je l'ai fait ce qui suit dans une sous-classe de NSArrayController:
+ (NSSet *)keyPathsForValuesAffectingItems
{
return [NSSet setWithObjects:@"selectedObjects",nil];
}
qui devrait être suffisante AFAIK. La méthode de classe est appelée mais ne semble pas avoir d'effet.
Si je mets en œuvre un observateur pour selectedObjects
il fonctionne très bien:
- (void)awakeFromNib;
{
[self addObserver:self forKeyPath:@"selectedObjects" options:0 context:nil];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(NSObjectController *)context;
{
if ([keyPath isEqual:@"selectedObjects"]) {
[self willChangeValueForKey:@"items"];
[self didChangeValueForKey:@"items"];
}
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
Un indice?
est une propriété personnalisée de ma sous-classe NSArrayController. C'est également une propriété de la classe que gère NSArrayController. Je ne peux pas lier directement car j'ai besoin de faire une logique supplémentaire qui ne peut pas être manipulée par la classe que le contrôleur RAID gère. – diederikh
Je vous recommande de poster les parties pertinentes de votre code personnalisé. Trop de devinettes sont nécessaires car les détails manquent. –