作为NSResponders的Cocoa MVC和NSView

时间:2014-04-20 18:43:16

标签: objective-c macos cocoa model-view-controller

我将在序言中说我对整个编程场景都很陌生。尽管如此,我在我的第一个OS X应用程序中取得了一些进展,一个简单的" Paint"风格应用。但是,在阅读基于文档的编程指南后,我只剩下几个问题。

我目前的设置是我传递变量"通过"我的自定义对象到达目的地。 例如我有自定义视图,它创建一个自定义控制器并将指针传递给它。然后,控制器创建数据模型,并将对视图的引用传递给数据对象。但是如果一个更高级的对象需要这些数据,我需要有一个方法和通知系统来让它回来。此外,随着更多对象指向它,变得很难确保变量中的数据处于正确的状态。

我想创建一个更加水平的设置,但我遇到了一个问题:如何将NSView的NSResponder方法收集的数据导入到拥有的数据对象中(正确的术语?)由更高级别的控制器?我注释的文档SDK指南中的此图表说明了我对推荐设置的问题: enter image description here

我知道我做了很多错事,但我很难弄清楚如何做到这一点"对"办法。有人可以告诉我,我应该如何正确地从数据对象中的视图封装我的输入?

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题,但我想答案通常是:你不这样做。

视图输入时会通知控制器。这可能是通过委派观察,但在大多数情况下通过 target-action 。响应者链在这一点上不是焦点,它在后台工作。

控制器还负责对模型进行所有更改,并对其进行实例化和处理。

在您的示例中,NSDocument将为您执行一些这些数据模型的操作,但NSDocument不会在每个应用程序中使用。

另一个方向通常通过 outlet 工作,其中控制器填写用户界面可能需要的所有数据。在基于NSDocument的应用程序中,NSDocument的子类通常会在此处占用控制器的一部分。