У меня есть 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
Этот метод никогда не вызывается, если я вручную вызываю NSLog (@ "Выбранные объекты:% @", [arrayController selectedObjects]) Я получаю это
В результате всегда получается что-то вроде этого
END UPDATE
2011-07-05 20:44:45.711 collectionView2[2153:903] Selected objects 1: (
"<Hormiga: 0x10013e330>"
)
Я думаю, что сделал что-то неправильно, связывая NSArrayController с NSCollectionView.В чем может быть моя вина?Скажите, если вам нужна дополнительная информация, я даже могу выложить всю программу в виде zip, если вам это нужно.
ОБНОВЛЕНИЕ 2
Это код, который я использую в своем контроллере для наблюдения за arrayControllerКлюч «selectionIndexes».
[arrayController addObserver:self forKeyPath:@"selectionIndexes" options:NSKeyValueObservingOptionNew context:nil];
ОБНОВЛЕНИЕ 3
Одна из проблем была исправлена, я забыл установить привязку между NSArrayController и NSCollectionView относительно ключа «selectionIndexes».Теперь я могу вручную получить список selectedObject и его правильный!
Моя последняя проблема - я не получаю уведомления при изменении selectionIndexes.Так что visibleValueForKeyPath: ofObject: change: context: никогда не вызывать!
UPDATE 4
Я пытался установить наблюдателя в методе init моего контроллера, но таким образом arrayController по-прежнемуноль.Перемещение addObserver в awakeForNib решило все мои проблемы!