2009-12-30 3 views
0

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?

Répondre

0

D'abord, "items" n'est pas une propriété observable de NSArrayController. Voulez-vous dire que c'est une propriété de la classe pour laquelle votre contrôleur RAID gère une collection? C'est à dire, il gère un tableau de Foo et Foo a une propriété "items"?

Dans tous les cas, vous rendez cela plus difficile que nécessaire. Pourquoi ne pas simplement aller de l'avant et lier le contenu du contrôleur d'arbre au chemin selection.items du contrôleur de réseau? Il y a peu de situations où cela n'est pas possible.

+0

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

+1

Je vous recommande de poster les parties pertinentes de votre code personnalisé. Trop de devinettes sont nécessaires car les détails manquent. –

Questions connexes