Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 代理是否应该通过控制器获取模型?_Objective C_Cocoa_Model View Controller - Fatal编程技术网

Objective c 代理是否应该通过控制器获取模型?

Objective c 代理是否应该通过控制器获取模型?,objective-c,cocoa,model-view-controller,Objective C,Cocoa,Model View Controller,试图弄明白MVC的概念 我有一个NSCustomView,它实现了drawRect:,它基于自定义视图的控制器中指定的委托。我的问题是,代理是应该指向模型的控制器,还是可以将代理直接指向模型 NSCustomView是否应该请求NSWindowController请求模型的控制器请求模型获取数据?“适当”的MVC设计似乎有太多的层。通常,代理是视图控制器,或者适合控制器类型的角色。如果这不是你的情况,那么你可以更详细地解释发生了什么事情。阅读。虽然可以让模型和视图直接通信,但在Cocoa版本的M

试图弄明白MVC的概念

我有一个NSCustomView,它实现了drawRect:,它基于自定义视图的控制器中指定的委托。我的问题是,代理是应该指向模型的控制器,还是可以将代理直接指向模型


NSCustomView是否应该请求NSWindowController请求模型的控制器请求模型获取数据?“适当”的MVC设计似乎有太多的层。

通常,代理是视图控制器,或者适合控制器类型的角色。如果这不是你的情况,那么你可以更详细地解释发生了什么事情。

阅读。虽然可以让模型和视图直接通信,但在Cocoa版本的MVC中,它们总是通过控制器通信。如果我应该在m V和C之间完全分离。应用程序中的什么应该“拥有”m部件?C拥有M吗?是什么创造了M部分?现在我让我的C创建M,但这会造成问题,因为我正在尝试归档数据,这不太好,因为它也归档了C。在这方面你有相当多的自由,这在很大程度上取决于你的应用程序设计。例如,iOS应用程序通常没有任何文档感,因此该模型可能由应用程序委托创建,然后根据需要传递给控制器。桌面应用程序更有可能使用文档,在这种情况下,可能是文档创建了模型,而应用程序委托只是响应新的和打开的命令创建文档。因此,在桌面示例中,文档是否也创建了视图实例?我好像错过了什么。我查看了TextEdit示例,但没有看到MVC是如何分配的以及它们保存在哪里的。我有一个“基于文档”的桌面应用程序。但每个项目都由多个NSWindowController组成。请参阅文本编辑源中的
-[Document makeWindowController]
。它实例化了DocumentWindowController,该控制器从nib加载窗口。这就是我的看法。然后查看
-[Document init]
-[Document readFromURL:ofType:encoding:ignoreRTF:][/code>,注意documents NSTextStorage对象是如何创建和填充数据的;这就是模型。文档本身和文档窗口控制器扮演着控制器的角色,这真的很奇怪,因为NSDocument(模型/数据)拥有WindowController(控制器),而WindowController又拥有nib实例(视图)。