У меня есть NSCollectionView, содержимое которого обрабатывается NSArrayController. NSCollectionView можно выбрать, и мне нужно получить список выбранных элементов. Я пытаюсь наблюдать за ключевым свойством NSArrayController «selectionIndexes», но он просто возвращает мне ВСЕГДА значение первого элемента в CollectionView, а не выбранных элементов.
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if([keyPath isEqualTo:@"selectionIndexes"])
{
//True if in the array controller of the collection view really exists at least a selected object
if([[arrayController selectedObjects] count] > 0)
{
NSLog(@"Selected objects: %@", [arrayController selectedObjects]);
}
else
{
NSLog(@"Observer called but no objects where selected.");
}
}
}
UPDATE
Я никогда не вызываю этот метод, если я вручную invoke NSLog (@ "Выбранные объекты:% @", [arrayController selectedObjects]) Я получаю это
Результат всегда примерно такой
END UPDATE
2011-07-05 20:44:45.711 collectionView2[2153:903] Selected objects 1: (
"<Hormiga: 0x10013e330>"
)
Я думаю, что я сделал что-то неправильное, связав NSArrayController с NSCollectionView. В чем могла быть моя вина? Скажите, если вам нужна дополнительная информация, я могу даже опубликовать всю программу в zip-архиве, если она вам нужна.
Это код, который я использую в своем контроллере для наблюдения за клавишей selectionIndexes в arrayController.
[arrayController addObserver:self forKeyPath:@"selectionIndexes" options:NSKeyValueObservingOptionNew context:nil];
Одна из проблем была исправлена, я забыл установить привязку между NSArrayController и NSCollectionView относительно ключа selectionIndexes. Теперь я могу вручную получить список selectedObject и его правильный!
Моя последняя проблема в том, что я не получаю уведомление при изменении selectionIndexes. Итак, наблюдайтеValueForKeyPath: ofObject: change: context: никогда не вызывается!
Я пытался установить наблюдателя в методе инициализации моего контроллера, но в этом случае arrayController все еще имеет значение null. Перемещение addObserver в awakeForNib решило все мои проблемы!