Как связать включенное состояние NSMenuItem с выбором NSArrayController? Я пробовал привязать включенное состояние элемента к selectedObjects или selectedIndexes контроллера, и ни в том, ни в другом случае элемент меню никогда не активируется, когда есть выбор. В ИБ я снял галочку "включить". Я просто хочу, чтобы NSMenuItem был включен, когда в таблице есть выбор. Моя таблица допускает множественный выбор, и я также использую кнопку, которая привязана к selectedObjects. @ Count, а кнопка включает / отключает, как ожидалось, поэтому я подумал, что использование того же пути к клавишам будет работать и для элемента меню, но нет. Это не может быть трудным, поскольку я не могу найти ответ через Google, поэтому я считаю, что это должно быть просто. Спасибо
Как привязать NSMenuItem к NSArrayController
Ответы (1)
Включенная привязка должна получить значение BOOL
и, к сожалению, не будет просто обрабатывать любой старый объект как логическое значение True. К счастью, NSValueTransformer
делает это легко. Есть пара констант, названных в _ 3_ Справочник по классам, который можно использовать на панели привязок в IB.
В вашем случае вы можете привязать путь ключа модели к «selectedObjects» и ввести «NSIsNotNil» в поле «Преобразователь значений». Преобразователь придает привязке необходимое значение BOOL
.
person
jscs
schedule
30.03.2011
Хорошо, я попробовал это, но когда я установил путь для ключей как myarraycontroller.selectedObjects, я получил! в котором говорится, что Xcode не может разрешить ключевой путь. Кстати, я использую Xcode 4. Мой пункт меню и контроллер массива находятся в разных Xib, если это имеет значение.
- person Lazloman; 31.03.2011
Да, это имеет значение. Вы не можете просто так привязать xib-файлы. У объектов в одном нет возможности узнать об объектах в другом. Вам нужно будет связать элемент меню и контроллер массива через объект, имеющий ссылку на оба xib. Возможно, делегат вашего приложения может иметь ссылку на объект, который является владельцем файла второго?
- person jscs; 31.03.2011
Вот что я подозревал. У меня есть ссылка на делегата моего приложения, и IB разрешает имя контроллера массива, когда я ввожу его в поле Model Key Path (Xcode 4), но когда я добавляю selectedObjects, то есть (myArrayController.selectedObjects), я получаю! и он говорит, что Xcode не может разрешить введенный ключевой путь. Да ладно, я могу просто сделать это в коде, если понадобится.
- person Lazloman; 31.03.2011
@Lazloman: Я не знаю, отражает ли автозаполнение в IB фактическую область видимости. Это может. Хотя подождите секунду. Ваша привязка не может быть
myArrayController.selectedObjects
. Это должно быть что-то вроде: Объект, привязанный к: Владельцу файла; Путь к ключу модели: myAppDelegateReference.myArrayControllerOutlet
; Ключ контроллера: selectedObjects
. Вы поместили новый объект во второй наконечник и настроили его так, как будто это делегат приложения? Это не сработает. Он создает другой объект. Да, вам придется написать какой-то код, но он просто настраивает два ivars, один из которых является IBOutlet.
- person jscs; 31.03.2011
Я установил его на владельца файла, а остальное, что я написал, было ключевым путем. Хорошо, позвольте мне создать новую розетку и посмотреть, как это должно работать. Я вернусь.
- person Lazloman; 01.04.2011