У меня есть NSTreeController, массив которого привязан к свойству "items" (custom) подкласса NSArrayController. Поскольку контроллер дерева не связан с выбором NSArrayController, мне нужно убедиться, что контроллер дерева знает, что элементы должны быть извлечены после изменения выбора контроллера массива.NSTreeController KVO issue
Я сделал следующее в подклассе NSArrayController:
+ (NSSet *)keyPathsForValuesAffectingItems
{
return [NSSet setWithObjects:@"selectedObjects",nil];
}
Какой должна быть достаточной AFAIK. Метод класса вызывается, но, похоже, не имеет никакого эффекта.
Если я реализую наблюдатель за selectedObjects
он работает отлично:
- (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];
}
Любые подсказки?
Элемент является обычным свойством моего подкласса NSArrayController. Он также является свойством класса, которым управляет NSArrayController. Я не могу связать напрямую, поскольку мне нужно сделать некоторую дополнительную логику, которая не может быть обработана классом, которым управляет контроллер массива. – diederikh
Я бы рекомендовал размещать соответствующие части вашего пользовательского кода. Слишком много угадывания необходимо, поскольку детали отсутствуют. –