Получить выбранный объект в ArrayController из представленного им элемента NSCollectionView

Иногда мне просто хочется биться головой о стену. Это особенно верно при работе с Cocoa и сверхуниверсальной документацией Apple. (Документация Apple на самом деле очень хороша, я просто злюсь, что не могу в этом разобраться)

Итак, у меня есть класс «IOWallpaper», в котором хранятся «имя» и «путь», который подключен к ArrayController.

Затем этот ArrayController подключается к NSCollectionView, чтобы NSCollectionView мог быть заполнен NSCollectionViewItem.

Я пытаюсь сделать так, чтобы вы могли выбрать ОДИН элемент в NSCollectionView, и когда вы нажимаете на этот элемент, он возвращает представленный объект IOWallpaper из массива.

Ближе всего к этому мне удалось установить привязку «Индексы выбора» для NSCollectionView, а затем использовать параметрObservValueForKeyPath для ключа «selectionIndexes». Он знает, что я выбрал объект 1, но не могу вернуть объект IOWallpaper из объекта NSArrayController, который возвращается с помощью наблюдателя.

Итак, по сути, я хочу преобразовать параметр объекта (id) вObservValueForKeyPath обратно в объект IOWallpaper, чтобы я мог получить доступ к его членам?

Это, вероятно, не имеет никакого смысла, но это лучшее, что я могу объяснить.

Спасибо за то, что вы слушали.


person Community    schedule 30.10.2014    source источник


Ответы (1)


Чтобы ответить на вопрос, который вы задали: просто введите его:

IOWallpaper * myWallpaper = (IOWallpaper*) object[0];

Кроме того, вам, вероятно, следует наблюдать за NSMenuDidEndTrackingNotification, чтобы поймать щелчок выбора:

// listen for end track event of our menu (the bottleneck for handling selections)
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(handleEndTrack:)
                                             name:NSMenuDidEndTrackingNotification
                                           object:[[[self view] enclosingMenuItem] menu]];

Это было «заимствовано» из пример проекта GridMenu.

person geowar    schedule 31.10.2014