繁体   English   中英

NSDocument将事件发送到NSViewControllers的标准方式是什么?

[英]What's the standard way for NSDocument to send events to NSViewControllers?

(背景:我有一个正在编写的Cocoa应用程序,可以正常运行,但是太复杂了,因为它无法很好地分离模型/视图/控制器。因此,我将其更新为使用NSDocument和NSWindowController /总体来说,这是一个不错的变化,但是有些地方我还不太了解。)

我有一个保存文档状态的NSDocument,以及一个管理逻辑的NSWindowController-> NSViewControllers层次结构。 当视图控制器响应用户输入并需要更改某些状态时,它可以轻松获取其NSDocument并在其上调用一个方法以进行请求的更改(这还将在undoManager中注册,等等)。 这个方向很好。

但是另一个方向还不清楚。 当NSDocument进行更改时(也许是直接响应用户的编辑,但也许不是直接响应),它通常如何将事件发送给视图控制器以更新视图?

我在Apple文档中看到了一些方便的图表 ,但我不清楚它们要显示的内容。 橙色箭头定义为“拥有并管理”,但是它从未说出虚线箭头,双头箭头或双头箭头的含义。

它们是否意味着建议应用程序通常具有通过其NSWindowController中的方法表示的每种类型的状态更改,然后将它们传递给NSViewController树中的相应方法? 这看起来很笨拙。

现在,我倾向于让我的NSDocument在NSNotifications上发布所有更改,然后让NSViewControllers准确注册他们关心的通知。 这似乎不太笨拙,但也许仍然不理想。

编辑:还是KVO? 苹果公司的示例确实使用了KVO,但它也具有简单得多的数据模型。 我不确定这是否对我有用,而且似乎与Swift的发展方向也不完全一致。 我不想跳上没有美好未来的事情。

我读过的所有内容都说要避免使用KVO,而且KVO在所有可可粉中的API最差。 所以我们就跳过它。

com.sys.mac.programmer.help上的旧帖子说NotificationCenter是一个很好的解决方案:

我的偏好是在模型的设置器中发布通知,并注册我的窗口控制器(或控制视图的任何控制器)以接收那些通知

由于某种原因,很难找到使用NSDocument的示例程序,但这是使用此模式的程序的简单示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM