objective-c - Cocoa MVC 和充当 NSResponders 的 NSView

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

我会先说我对整个编程场景非常陌生。尽管如此,我在我的第一个 OS X 应用程序(一个简单的“Paint”风格应用程序)中取得了一些进展。然而,在阅读基于文档的编程指南后,我留下了一些问题。

我当前的设置是“通过”我的自定义对象传递变量以到达其目的地。 例如我有我的自定义 View ,它创建一个自定义 Controller 并将指向其自身的指针传递给它。然后 Controller 创建一个数据模型并将 View 的引用传递给数据对象。但是,如果更高层的对象需要该数据,我需要有一个方法和通知系统来使其返回。此外,随着越来越多的对象指向变量,确保变量中的数据处于正确状态也变得越来越困难。

我想创建一个更水平的设置,但我有一个问题:如何将 NSView 的 NSResponder 方法收集的数据获取到更高级别拥有的数据对象(这是正确的术语吗?) Controller ?我注释的文档 SDK 指南中的下图说明了我对推荐设置的问题: enter image description here

我知道我做错了很多事情,但我很难弄清楚如何以“正确”的方式去做。有人可以告诉我如何正确地将 View 中的输入封装在数据对象中吗?

最佳答案

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

当 View 获得输入时, Controller 会收到通知。这可能是通过委托(delegate)观察实现的,但在大多数情况下是通过目标操作实现的。此时响应者链不是焦点,它在后台工作。

Controller 还负责对其实例化和处理的模型进行所有更改。

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

另一个方向通常通过导出工作,其中 Controller 填充用户界面可能需要的所有数据。在基于 NSDocument 的应用程序中,NSDocument 的子类通常会充当 Controller 的一部分。

关于objective-c - Cocoa MVC 和充当 NSResponders 的 NSView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23186255/

相关文章:

ios - 尝试使 UITableViewCell 可滑动和可点击,同时保持 UITableView 可滚动,为什么我的单元格有时只能滑动?

macos - glTexSubImage2D 将 NSImage 移动一个像素

c++ - 无法在 OS X 10.9 Mavericks 上编译 Asterisk

objective-c - 在大型 Cocoa 应用程序中放置导出/操作的最佳位置?

cocoa - NSTextView 不可编辑的文本区域?

ios - 多个 UIWindows 以及哪个控制状态栏方向

ios - 在 iOS 应用程序中调试 MIDI

ios - 使用视频/相机时未触发 AVAudioSessionInterruptionNotification

java - 从 Java 调用时 OS X 命令行应用程序无法找到目录

macos - NSResponder 在 acceptsFirstResponder 为 false 时接受事件?