Iphone 在MVC中,您将模型类的引用放在哪里?
在询问了不同的人之后,我一直在想,他们中的任何人都没有提供我所说的“至少有一点具体的答案”: 问题: 在iPhone应用程序中,应用程序应该在何处保留对其模型类的引用(使用该方法) 在iPhone(和Cocoa)应用程序中,我们称之为“应用程序代理”,它基本上启动应用程序并初始化控制器,还处理UITouch事件 那么,应用程序代理是控制器吗?模范班?两个都没有?我认为不知道这一点也会让人困惑,不知道将模型引用放在哪里 例如: 您拥有应用程序委托,该委托包含对应用程序视图控制器的引用。如果我的应用程序将使用模型类A(它是一个Web服务器守护程序类)和一个存储该Web服务器查询的数据的类B 你们会把A和B的参考存放在哪里?(应用程序代理?视图控制器?两者?)Iphone 在MVC中,您将模型类的引用放在哪里?,iphone,cocoa,cocoa-touch,model-view-controller,Iphone,Cocoa,Cocoa Touch,Model View Controller,在询问了不同的人之后,我一直在想,他们中的任何人都没有提供我所说的“至少有一点具体的答案”: 问题: 在iPhone应用程序中,应用程序应该在何处保留对其模型类的引用(使用该方法) 在iPhone(和Cocoa)应用程序中,我们称之为“应用程序代理”,它基本上启动应用程序并初始化控制器,还处理UITouch事件 那么,应用程序代理是控制器吗?模范班?两个都没有?我认为不知道这一点也会让人困惑,不知道将模型引用放在哪里 例如: 您拥有应用程序委托,该委托包含对应用程序视图控制器的引用。如果我的应用
这里有很多选择,但作为一个例子,我真的很想知道你们如何使用mvc来组合这个只使用一个视图的应用程序。将所有内容都放在AppDelegate中是很有诱惑力的,但是如果你开始这样做,那么你的AppDelegate将充满引用黑客。如果你正在做一个严格的MVC,那么你应该有三件事:
- 模型
- 视图控制器(仅用于视图逻辑)
- 控制器(用于协调视图和模型)
- 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类的实例,该类加载并拥有视图
- 如果它是一块只供a使用的数据(如配置数据或静态网站数据),我会让它由服务器(a)创建和拥有
- 如果是在服务器运行期间创建的数据,并且需要在视图中显示,则您可能需要以下内容:
- A拥有的可变数组,用于保存B的实例
- 另一个控制器类(D)引用该数组并充当视图的数据源/委托
当然,如果你有一个简单的应用程序,没有真正的理由不让你的应用程序控制器扮演模型控制器的角色。您希望避免的是包含数百行代码的文件,所有这些代码都执行概念上无关的任务。我发现在大多数情况下,AppDelegate提供了一个放置一些基本功能的好地方(例如,您希望在每个控制器中应用的背景图像),但是,您希望在其他地方有额外的控制器和模型代码。navController或rootController通常作为属性放置在AppDelegate上 所以,我想说,这是某个地方