У меня есть элемент NSUserDefaults, представляющий собой массив словарей. Каждый словарь в этом массиве соответствует объекту, который определяет свойства, которые мне нужны в NSMenuItem. Одним из этих свойств ключа / значения в каждом словаре является логическое значение, определяющее, должен ли элемент меню отображаться или скрываться. Ключом для этого значения является «шоу». Вот наглядный пример:
MenuItems (Array)
Item 0 (Dictionary)
label (String) "Menu Item 1"
show (Boolean) YES
Item 1 (Dictionary)
label (String) "Menu Item 2"
show (Boolean) NO
В этом случае первый пункт меню будет показан, а второй нет. Я хочу, чтобы это динамически обновлялось при изменении настроек пользователя по умолчанию (через панель настроек).
В идеале я бы хотел связать атрибут "hidden" в NSMenuItem непосредственно с соответствующим значением "show". К сожалению, согласно NSMenuItem Bindings , скрытый не является чем-то, что может быть связано. Но я все равно попробовал, и я не уверен, что я буду работать. Сложность заключается в том, что это массив словарей, и мне не ясно, как здесь будут работать привязки. У меня есть NSArrayController, связанный с sharedIserDefaults MenuItems, и я могу видеть различные фрагменты данных через упорядоченные объекты во время отладки.
Я много чего пробовал:
- Привязка непосредственно к значению словаря
- Создание оберточного NSObjectController для каждого словаря и привязка к ключевому пути "content.show"
- Наблюдение за самим словарем через addObserver: forKeyPath: options: context
- Наблюдение за упакованным NSObjectController, как описано выше.
Ничто из этого не вызывает ничего. Наблюдение за NSOrrayController с помощьюOreObjects напрямую, тем не менее, запускает наблюдаемостьValueForKeyPath: ... но это на самом деле не сильно отличается от того, что требуется для всего свинца и использования NSUserDefaultsDidChangeNotification.
Есть ли способ решить эту проблему с помощью привязок или KVO, которые приведут меня к уровню детализации, который я ищу?