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