2011-04-15 35 views
20

我已阅读Apple的MVC article,并对各种事情感到困惑。首先,Apple在几乎所有示例应用程序中都使用了View和Controller的组合,这很好,我喜欢它,但是他们在本文中反驳了他们自己,因为他们说View不应该依赖控制器等。了解iOS应用中使用的MVC模式

我的主要问题是没有人有链接到苹果的示例iOS项目之一,这是MVC模式的一个很好的例子 - 数据检索等,因为我没有完全理解模式的模型部分。

我不明白'域对象'和模型对象之间的区别。例如,如果我想检索一个订单列表,这将发生在模型类Orders中。然后,我会有另一个具有OrderDate,OrderNumber等属性的类Order吗?或者它如何工作?

+2

并非所有Apple示例代码都遵循适当的MVC。示例代码是演示/显示一个API。这些示例中的模型对象也可以像NSMutableDictionary对象一样简单。 – 2011-04-15 11:11:32

回答

10

这个sample code演示了加载和显示UITableView的多阶段方法。我认为潜入其中非常有趣。它将展示MVC。

5

我相信,下面的代码将帮助您了解如何使用MVC中的iOS应用程序,因为它的描述说工作:

“MVCNetworking是一个示例,演示如何创建使用网络 应用模型 - 视图 - 控制器设计模式。 特别是,它通过从Web服务器获取图库的XML 描述,缩略图和照片并使用Core数据在本地缓存此信息来显示照片库。

http://developer.apple.com/library/ios/#samplecode/MVCNetworking/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010443

+3

我很困惑的部分是在哪里把HTTP Web服务调用。在过去,当我使用MS MVC时,我们将Web服务调用放在控制器中。但是对于ios开发,我得到了向Model添加http web服务调用的建议。我觉得这两种方式都有效,但我不确定哪种方式更适合MVC模式。您对此有何看法?谢谢! – trillions 2013-03-09 18:54:21

+0

我也是这样,我把它们分开。尽管我已经看到服务调用在模型中运行得很好的实现。我的例子是一个uiimage,其中服务调用嵌入到该类中,以便在显示占位符图像时从Web上检索图像。但通常我会看到这个示例中的代码结构http://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html – Biclops 2013-07-06 00:24:00

5

这里的模型 - 视图 - 控制器(也称为MVC)模式如何映射到你的应用程序中的主要部分:

模型→数据

查看→用户界面

控制器→核心逻辑

这个解释f ully与示例代码

http://www.hollance.com/2011/04/making-your-classes-talk-to-each-other-part-1/

enter image description here

+0

“我的主要问题是没有人有链接到苹果的一个示例iOS项目,这是MVC模式的一个很好的例子“ – Fattie 2014-03-01 12:38:28

+0

答案唯一的代码。那是不是完全描述MVC – codercat 2014-03-01 12:46:53

+0

我希望OP从3年前发布这个问题后就得到了MVC。 – vikingosegundo 2014-03-01 12:58:56

3

这是迄今为止最好的,但简单的解释我遇到(从RayWenderlich拍摄)

“的背后MVC的想法是,
- VIEWS应该只关心他们如何呈现它们是如何呈现的,
- 模型应该只关心它们的DATA,
- 并且控制器应该工作到MARRY th两个没有必要太了解他们的内部结构。“

5
  • 模式是应用程序的大脑。它执行 计算并创建一个虚拟世界,可以在没有视图和控制器的情况下生存 。换句话说,将 作为您的应用程序的虚拟副本,无需面对!

  • 一个观点是通过用户与 应用程序交互的窗口。它显示大部分时间内模型的内容,但除此之外,它还接受用户的交互。任何 用户和您的应用程序之间的交互被发送到视图, 然后可以由视图控制器捕获并发送到 模型。

  • 控制器在iOS编程中通常是指视图控制器。将视图控制器视为模型与您的 视图之间的桥梁。他们解释一方发生了什么(用户在视图方面做了什么或者由模型提供的信息)以及 如何根据需要使用该信息来改变另一方。

+0

很好的解释@Naman – iPatel 2017-11-02 13:19:27