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
Iphone 在MVC中,您将模型类的引用放在哪里?_Iphone_Cocoa_Cocoa Touch_Model View Controller - Fatal编程技术网

Iphone 在MVC中,您将模型类的引用放在哪里?

Iphone 在MVC中,您将模型类的引用放在哪里?,iphone,cocoa,cocoa-touch,model-view-controller,Iphone,Cocoa,Cocoa Touch,Model View Controller,在询问了不同的人之后,我一直在想,他们中的任何人都没有提供我所说的“至少有一点具体的答案”: 问题: 在iPhone应用程序中,应用程序应该在何处保留对其模型类的引用(使用该方法) 在iPhone(和Cocoa)应用程序中,我们称之为“应用程序代理”,它基本上启动应用程序并初始化控制器,还处理UITouch事件 那么,应用程序代理是控制器吗?模范班?两个都没有?我认为不知道这一点也会让人困惑,不知道将模型引用放在哪里 例如: 您拥有应用程序委托,该委托包含对应用程序视图控制器的引用。如果我的应用

在询问了不同的人之后,我一直在想,他们中的任何人都没有提供我所说的“至少有一点具体的答案”:

问题:

在iPhone应用程序中,应用程序应该在何处保留对其模型类的引用(使用该方法)

在iPhone(和Cocoa)应用程序中,我们称之为“应用程序代理”,它基本上启动应用程序并初始化控制器,还处理UITouch事件

那么,应用程序代理是控制器吗?模范班?两个都没有?我认为不知道这一点也会让人困惑,不知道将模型引用放在哪里

例如:

您拥有应用程序委托,该委托包含对应用程序视图控制器的引用。如果我的应用程序将使用模型类A(它是一个Web服务器守护程序类)和一个存储该Web服务器查询的数据的类B

你们会把A和B的参考存放在哪里?(应用程序代理?视图控制器?两者?)


这里有很多选择,但作为一个例子,我真的很想知道你们如何使用mvc来组合这个只使用一个视图的应用程序。

将所有内容都放在AppDelegate中是很有诱惑力的,但是如果你开始这样做,那么你的AppDelegate将充满引用黑客。如果你正在做一个严格的MVC,那么你应该有三件事:

  • 模型
  • 视图控制器(仅用于视图逻辑)
  • 控制器(用于协调视图和模型)
例如,我有一个模型Foo和一个Foo控制器。我会:

  • Foo.m(模型)
  • FooViewController.m(显示一个Foo)
  • FooController.m(控制逻辑)

最后,为了回答您的问题,我将把对Foo的引用存储在Foo控制器中。我喜欢为我的控制器使用单例,但那只是我自己。如果您使用单例,您可以这样做:
[[FooController sharedInstance]ListofOOS]
获取您的Foo的

传统上,控制器创建模型,然后使用该模型初始化视图。然后,控制器侦听模型和视图中的更改,并通过该视图协调程序流。这是我的一般答案,也许iPhone开发的实际情况会有所不同

在iPhone应用程序中,应用程序应该在何处保留对其模型类的引用(使用MVC方法)

控制器层保留对模型层的引用

那么,应用程序代理是控制器吗?模范班?两个都没有

应用程序委托是一个控制器

你们会把A和B的参考存放在哪里

A和B是通常由控制器层创建和拥有的模型类

我很想知道你们如何使用mvc来整合这个只使用一个视图的应用程序

控制器层的目的是允许模型层和视图层自包含。模型不应该知道关于控制器或视图层的任何信息。视图不应该知道关于控制器或模型层的任何信息。控制器的任务是在一侧为模型和另一侧为视图提供双端适配器

我会这样设置您的示例应用程序:

  • UIApplication委托给AppDelegate
  • 如果服务器类(A)的操作简单:
    • AppDelegate创建并拥有服务器类A的实例
  • 如果服务器类(A)的操作复杂:
    • 创建专用控制器类(C)以控制服务器
    • AppDelegate创建并拥有类C的实例。每个(A)实例有一个(C)实例
    • 类C的每个实例创建并拥有一个类A的实例
  • AppDelegate创建并拥有ViewController类的实例,该类加载并拥有视图
这个问题不清楚B班的目的是什么

  • 如果它是一块只供a使用的数据(如配置数据或静态网站数据),我会让它由服务器(a)创建和拥有
  • 如果是在服务器运行期间创建的数据,并且需要在视图中显示,则您可能需要以下内容:
    • A拥有的可变数组,用于保存B的实例
    • 另一个控制器类(D)引用该数组并充当视图的数据源/委托

在我的应用程序中,我通常将AppDelegate类重命名为AppController,如果这有助于从概念上更好地解释问题的话。您的应用程序控制器负责创建和/或配置模型控制器(管理您的模型对象集合)和窗口或视图控制器,并在需要时设置它们之间的引用,以及调用这些控制器上的方法,以响应主菜单中的非应用程序委托方法或高级操作方法。根据应用程序的复杂程度,您可能还拥有在应用程序控制器外部创建的其他模型或视图控制器


当然,如果你有一个简单的应用程序,没有真正的理由不让你的应用程序控制器扮演模型控制器的角色。您希望避免的是包含数百行代码的文件,所有这些代码都执行概念上无关的任务。

我发现在大多数情况下,AppDelegate提供了一个放置一些基本功能的好地方(例如,您希望在每个控制器中应用的背景图像),但是,您希望在其他地方有额外的控制器和模型代码。navController或rootController通常作为属性放置在AppDelegate上

所以,我想说,这是某个地方