SelectionIndexes в NSArrayController возвращают только значение

У меня есть 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-архиве, если она вам нужна.

ОБНОВЛЕНИЕ 2

Это код, который я использую в своем контроллере для наблюдения за клавишей selectionIndexes в arrayController.

[arrayController addObserver:self forKeyPath:@"selectionIndexes" options:NSKeyValueObservingOptionNew context:nil];

ОБНОВЛЕНИЕ 3

Одна из проблем была исправлена, я забыл установить привязку между NSArrayController и NSCollectionView относительно ключа selectionIndexes. Теперь я могу вручную получить список selectedObject и его правильный!

Моя последняя проблема в том, что я не получаю уведомление при изменении selectionIndexes. Итак, наблюдайтеValueForKeyPath: ofObject: change: context: никогда не вызывается!

ОБНОВЛЕНИЕ 4

Я пытался установить наблюдателя в методе инициализации моего контроллера, но в этом случае arrayController все еще имеет значение null. Перемещение addObserver в awakeForNib решило все мои проблемы!

6
задан Giuseppe 6 July 2011 в 09:43
поделиться