【发布时间】:2016-12-03 20:34:28
【问题描述】:
(背景:我正在编写一个运行良好的 Cocoa 应用程序,但它太复杂了,因为它没有很好地分离模型/视图/控制器。因此,我正在更新它以使用 NSDocument和 NSWindowController/NSViewController。总体来说,这是一个很好的改变,但是有几个部分我还不太明白。)
我有一个保存文档状态的 NSDocument,以及管理逻辑的 NSWindowController -> NSViewControllers 的层次结构。当视图控制器响应用户输入并需要更改某些状态时,它可以轻松获取其 NSDocument 并调用其上的方法以进行请求的更改(这也会将其注册到 undoManager,等等)。这个方向很好用。
但另一个方向不太清楚。当 NSDocument 进行更改时(可能是直接响应用户编辑,但可能不是),它通常如何将事件发送到视图控制器以更新视图?
我在 Apple 的文档中看到了一些方便的 diagrams here,但我不清楚他们想要展示什么。橙色箭头被定义为“拥有和管理”,但它从未说明虚线箭头、双头箭头或双头箭头的含义。
他们的意思是说应用程序通常具有由其 NSWindowController 中的方法表示的每种类型的状态更改,这些方法将它们传递给 NSViewController 树下的相应方法吗?这似乎相当笨拙。
现在,我倾向于让我的 NSDocument 为所有更改发布 NSNotifications,然后让 NSViewControllers 准确注册他们关心的通知。这似乎不那么笨拙,但可能仍然不理想。
编辑:还是 KVO? Apple 的示例确实使用了一点 KVO,但它也有一个更简单的数据模型。我不确定这对我有用,而且它似乎也不完全符合 Swift 的发展方向。我不想跳上没有美好未来的事情。
【问题讨论】:
标签: macos cocoa key-value-observing nsdocument nsviewcontroller