Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 充当nsrresponder的Cocoa MVC和nsview_Objective C_Macos_Cocoa_Model View Controller - Fatal编程技术网

Objective c 充当nsrresponder的Cocoa MVC和nsview

Objective c 充当nsrresponder的Cocoa MVC和nsview,objective-c,macos,cocoa,model-view-controller,Objective C,Macos,Cocoa,Model View Controller,首先,我要说的是,我对整个编程领域非常陌生。尽管如此,我还是在我的第一个OSX应用程序中取得了一些进展,这是一个简单的“绘画”风格的应用程序。然而,在阅读了基于文档的编程指南之后,我还有几个问题要问 我当前的设置是通过“传递”自定义对象来传递变量,以达到其目的地。 e、 我有一个自定义视图,它创建一个自定义控制器,并将指向自身的指针传递给它。然后,控制器创建一个数据模型,并将对视图的引用传递给数据对象。但是如果一个更高层次的对象需要这些数据,我需要一个方法和通知系统来让它恢复。而且,随着越来越多

首先,我要说的是,我对整个编程领域非常陌生。尽管如此,我还是在我的第一个OSX应用程序中取得了一些进展,这是一个简单的“绘画”风格的应用程序。然而,在阅读了基于文档的编程指南之后,我还有几个问题要问

我当前的设置是通过“传递”自定义对象来传递变量,以达到其目的地。 e、 我有一个自定义视图,它创建一个自定义控制器,并将指向自身的指针传递给它。然后,控制器创建一个数据模型,并将对视图的引用传递给数据对象。但是如果一个更高层次的对象需要这些数据,我需要一个方法和通知系统来让它恢复。而且,随着越来越多的对象指向变量中的数据,很难确保这些数据处于正确的状态

我想创建一个更为水平的设置,但我遇到了一个问题:如何将NSView的NSResponder方法收集的数据获取到一个由更高级别的控制器拥有的数据对象中(这是正确的术语吗?)?我注释的document SDK guide(文档SDK指南)中的此图说明了我在推荐设置方面的问题:


我知道我做了很多错事,但我很难找到正确的方法。有人能告诉我如何将视图中的输入正确地封装到数据对象中吗?

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

当视图获得输入时,会通知控制器。这可能是通过授权或观察,但在大多数情况下是通过目标行动。此时响应器链不在焦点中,它在后台工作

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

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


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

是的,这很有帮助。为了以更动态的方式连接事物,我可以使用委派、KVO、目标操作和出口。我将通过集成这些概念来创建一个更强大的应用程序。视图层不应创建控制器。这是倒退。控制器应该创建视图。如果视图需要对控制器的引用,则控制器会传入该引用。(例如,在控制器为目标的目标操作中,这是隐式的。与委派相同。)模型层不应具有对视图层的引用。是的,我的新想法是拥有一个NSWindowController子类,该子类管理所有视图(因为它们与窗口相关),并实例化一个自定义控制器对象,将引用传递给视图,然后所述自定义控制器创建数据对象。然后,我将让windowController将N事件从响应程序链传递到自定义控制器,然后自定义控制器将在数据对象和视图之间进行通信。希望这没有错?没关系。对于不是窗口或视图控制器的自定义控制器来说,接收
NSEvent
s有些不寻常。通常,窗口、视图或它们各自的控制器将事件解释为下一个更高级别的抽象,如调用动作方法、通知或委托方法。