我有一个应用程序,允许打开多个NSDocuments.在此应用程序中是一个单一的实用程序窗口,其中包含我想要应用于最前面的文档的一些功能.
我试图在这里使用绑定,所以诀窍是如何干净地将实用程序窗口的用户界面绑定到最前面的文档.目标是然后切换最前面的文档窗口将更新实用程序窗口中的视图; 当文档模型中的状态发生变化时,绑定到最前面文档模型属性的控件将被适当更新.
要从这样的窗口发送动作,只需使用第一响应者即可; 文档对象可以通过响应者链拦截动作.但我想要更多,当然你不能绑定第一响应者.
我有一些想法:
在我的nib中为对象窗口放置一个对象控制器.当文档窗口更改最前面的状态时,更改该绑定的内容.这样做的一个缺点是,如果我要使用另一种实用程序窗口,我必须记住将文档窗口中的绑定连接到该实用程序窗口!
在应用程序委托中创建一个访问器,通过遍历窗口列表获取最前面的文档窗口.我的实用程序窗口将通过应用程序委托的方法绑定.这里的缺点是它不符合KVO
在应用程序委托中有一个getter和setter来确定(并且可能设置为KVO兼容?这有意义吗?)最前面的文档.当窗口失去主要状态时,也许使用窗口通知将ivar设置为适当的值.更新:我现在正在使用它,它实际上看起来很干净.我设置为从价值windowDidBecomeMain我的文档窗口的通知,并清除它(如果它是当前值)windowWillClose.除非有任何重大异议,否则这可能是我将使用的方法.
一个想法是绑定到mainWindow.windowController.document ...这很接近,除了当我的共享窗口变为main时,这个绑定就会消失.所以我真的需要找到最前面的文档窗口的控制器(以及正确的类).
这些似乎都不对.有没有更好的方法来做到这一点,我错过了?