J'ai un NSArrayController (itemsController) qui contient un tableau de MyObject. Ce contrôleur est lié à un NSTableView qui a plusieurs colonnes, toutes liées à des propriétés différentes. Je veux observer l'une de ces propriétés ailleurs dans l'application.observeValueForKeyPath: appelé pour chaque propriété, pas seulement la propriété observée
[[self itemsController] addObserver:self forKeyPath:@"selectedObjects.someProperty" options:NSKeyValueObservingOptionNew context:nil];
Dans le rappel:
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
Je reçois appelé chaque fois que la propriété dans les changements de sélection, mais je veux seulement être appelée quand someProperty change dans un objet sélectionné.
Comment puis-je empêcher tous ces autres appels lorsque rien n'a vraiment changé?
L'observation de @ "selection.someProperty" a le même résultat.
Je trouve cela difficile à croire. Il n'y a aucun moyen d'observer * toutes * les propriétés d'un objet. Comment changez-vous les propriétés? Quel dictionnaire 'keyPath' et' change's recevez-vous? Est-ce que vous appelez explicitement '-will/didChangeValueForKey:' ou des méthodes similaires? Substituez-vous les méthodes KVC ou KVO (par exemple '-setValue: forKey:')? Le contrôleur RAID effectue-t-il un filtrage ou un tri? Est-ce que 'automaticallyRearrangesObjects' est activé? Au fait, il n'y a pas de doute: vous devriez être lié par 'selection' et ** not **' selectedObjects'. –