我一直想知道一段时间后,在询问不同的人并且没有任何人提供我称之为“至少有点具体的答案”之后:
问题:
在iPhone应用程序中,应用程序是否应该保留对其模型类的引用(使用MVC方法)?
在iPhone(和Cocoa)应用程序中,我们称之为“App Delegate”,它基本上启动了我们的应用程序,并且在我们的控制器中,也处理UITouch事件。
App代理是一个控制器吗?模特班?这两个都没有?我认为不知道这也让人知道如何放置模型参考资料。
示例:
您拥有Application Delegate,该委托包含对Application的View Controller的引用。如果我的应用程序将使用Model Class A(它是一个webserver守护程序类),而一个B类存储由该Web服务器查询的数据。
你们在哪里存储对A和B的引用? (App Delegate?查看控制器?两者?)
这里有很多选项,但作为一个例子,我真的很想知道你们如何使用mvc组合这个只使用一个View的应用程序。
答案 0 :(得分:7)
将一切都放在AppDelegate中很诱人,但如果你开始这样做,那么你的AppDelegate将充满参考黑客。如果你正在做一个严格的MVC,那么你应该有三件事:
例如,我有一个模型Foo和一个Foo控制器。我会:
最后,为了回答你的问题,我会在foo控制器中存储我对Foo的引用。我喜欢为我的控制器使用单身人士,但那就是我。如果你使用单身人士,你可以这样做:[[FooController sharedInstance] listOfFoos]
来获得你的Foo's
答案 1 :(得分:3)
在我的应用程序中,我通常将AppDelegate类重命名为AppController,如果这有助于在概念上更好地解释事物。您的app控制器负责创建和/或配置模型控制器(管理模型对象的集合)和窗口或视图控制器,在需要时在它们之间设置引用,并在这些控制器上调用方法以响应NSApplication委托方法或主菜单中的高级操作方法。根据应用程序的复杂程度,您可能还有在app控制器外部创建的其他模型或视图控制器。
当然,如果你有一个简单的应用程序,没有理由不让你的app控制器扮演模型控制器的角色。您要避免的是具有数百行代码的文件,所有代码都执行与概念无关的任务。
答案 2 :(得分:1)
传统上,控制器会创建模型,然后使用该模型初始化视图。然后控制器监听模型中的变化并查看并通过此协调程序的流程。这将是我的通用答案,也许实际上对于iPhone开发来说会有所不同。
答案 3 :(得分:1)
在iPhone应用程序中,应用程序是否应该保留对其模型类的引用(使用MVC方法)?
控制器层保留对模型层的引用。
App代理是一个控制器吗?模特班?这两个都没有?
App Delegate是一名控制员。
你们在哪里存储对A和B的引用?
A和B是通常由控制器层创建和拥有的模型类。
我真的很想知道你们如何使用mvc组合这个只使用一个View的应用程序。
控制器层的目的是允许模型和视图层自包含。模型不应该知道控制器或视图层的任何信息。视图不应该知道控制器或模型层的任何信息。控制器的工作是在一侧为模型的双端适配器,在另一侧为视图。
我会像这样设置你的示例应用程序:
在问题中不清楚B类的目的是什么。
答案 4 :(得分:0)
我发现在大多数情况下,AppDelegate提供了一个放置一些基本功能的好地方(比如你想在每个控制器中应用的背景图像),但是你想在其他地方拥有额外的控制器和模型代码。 navController或rootController通常会作为属性放在AppDelegate上。
所以,我会说它介于“既不”又“控制器”之间,而是倾向于“不”。绝对不是“模特”!