У меня есть приложение, которое позволяет открывать несколько документов NS. В этом приложении есть одно служебное окно, которое содержит некоторые функции, которые я хочу применить к самому переднему документу.
Я пытаюсь использовать здесь привязки, поэтому фокус в том, как чисто привязать пользовательский интерфейс окна утилиты к самому переднему документу. Цель состоит в том, чтобы затем переключение самого переднего окна документа обновило представление в окне утилиты; элементы управления, привязанные к свойствам модели самого переднего документа, будут обновляться соответствующим образом при изменении состояния в модели документа и т. д.
Для отправки действий из такого окна легко просто использовать первого респондента; объект документа может перехватывать действия через цепочку респондентов. Но я хочу большего, и, конечно же, вы не можете привязаться к первому респонденту.
Несколько идей, которые у меня есть:
- поместил объектный контроллер в мое перо для общего окна. Когда окно документа меняет статус самого переднего, измените содержимое этой привязки. Недостатком этого является то, что если бы у меня был другой вид служебного окна, я бы не забыл подключить привязки из окна документа к этому служебному окну!
- Сделайте аксессор в делегате приложения, который будет получать самое переднее окно документа, просматривая список окон. Мое служебное окно будет просто привязано через метод делегата приложения. Недостатком здесь является то, что он не совместим с KVO.
- Имейте в делегате приложения геттер и сеттер для определения (и, возможно, настройки KVO-совместимости? Имеет ли это смысл?) Самый главный документ. Возможно, используйте оконные уведомления, чтобы установить ivar на соответствующее значение, когда окно теряет основной статус. Обновление: я использую это сейчас, и на самом деле он кажется довольно чистым. Я устанавливаю значение из уведомления windowDidBecomeMain моего окна документа и очищаю его (если это текущее значение) в windowWillClose. Если нет серьезных возражений, я, вероятно, воспользуюсь этим подходом.
- Одна идея заключалась в привязке к mainWindow.windowController.document ... это идет close, за исключением того, что когда мое общее окно становится главным, эта привязка исчезает. Так что мне действительно нужно найти контроллер самого переднего окна document (и нужного класса).
Ничего из этого не кажется правильным. Есть ли лучший способ сделать это, что мне не хватает?