2010-09-07 62 views
4

我是新手编程,特定于iphone应用程序编程。在阅读了关于MVC的一堆之后,我决定在一个小应用程序中尝试一下。至于我的理解,MVC是这样工作的:iPhone MVC。模型问题

模型:数据,操纵数据,检索数据。 ViewController:格式化数据从模型(N​​SDate到特定样式)等。 查看:实际的gui。

如果这确实是一个基本的MVC理论的正确表述,我的困惑在于数据如何在模型,VC和视图之间传递。例如:如果我打电话到Twitter并获取模型中的数据,我如何(正确)将此信息传递给VC以便进一步工作。我知道VC和View之间主要使用IBOutlets。模型是我真正的问题。

在我的上一个应用程序中,我在应用程序委托中创建了一个NSString变量,所以我可以从任何类访问这些数据。不过,我读到,当应用程序变得复杂时,这不是最好的方法,因为代理负责启动,结束应用程序,而不是保存数据。

我读过委托方法,singleton的,NSNotification(我用它来调用其他类中的方法)。问题在于我不太了解如何使用这些技术将数据从模型传递到其他视图。

如果我的问题不清楚,请让我知道。

回答

3

如果您考虑可重用性,可以再次使用的主要组件是您的模型对象和视图对象。他们可以移动到不同的应用程序,仍然可以正常使用。您的视图控制器是真正特定于您的应用程序以及大部分应用程序逻辑的地方。

因此,在您的示例中,您可能有一个Twitter对象,可能存储来自用户的信息和推文。您可以在其自己的.h和.m文件中分别创建该类的所有函数。然后在您的视图控制器中,使用检索到的数据实例化twitter类,并从视图控制器中开始使用它。

您的视图控制器实际上是检索数据,但您的模型对象是维护数据的人。通过这种方式,您可以将模型数据与您的Twitter对象一起传递给其他视图控制器。

+0

你能给我一个例子,说明如何从ViewController类访问twitter类中的数据吗?这是我的主要问题。我认为我理解mvc,但我不太清楚如何在模型和控制器之间处理数据。 – nicholjs 2010-09-08 03:36:54

+0

一旦你从视图控制器创建了twitter对象,你就可以通过你在twitter类中创建的getters和setter来访问任何数据。 Twitter类将处理与自己的数据操作和处理有关的所有逻辑。你可以从视图控制器调用它们。因此,例如,您将创建twitter对象:twitterObject * t = [[twitterObject alloc] init ...];然后从你的视图控制器,你可以通过获得者访问数据,所以t.username或t.tweets等 – Kennzo 2010-09-08 15:55:19

+0

这正是我需要看到的。谢谢! – nicholjs 2010-09-08 23:16:12

1

对应用程序的控制驻留在控制器中,因此它是将检索或保存持久数据,使用该数据更新视图并处理各种事件的对象。考虑一下模型和视图之间的胶水!例如,如果您要点击一个按钮来打开一个新的模式视图,您可以在视图控制器中处理该事件。在响应点击按钮的方法中,您将创建或访问新的视图控制器,并使用presentModalViewController:animated:来呈现它。如果新视图和控制器需要当前控制器可以访问的数据,则可以在新控制器中设置属性以引用该对象。

+0

我明白了。但我仍然不明白如何在模型和控制器之间传递对象。在模型中说我有NSArray * myArray =一些数组。 – nicholjs 2010-09-07 21:17:41

+0

如何访问控制器中的数组? – nicholjs 2010-09-07 21:18:05

+0

您可以从您的控制器中定义或访问模型对象开始,就像您最初在使用字符串的代表中所做的一样。该模型不需要知道有关视图或控制器的任何信息。它是了解模型和视图的控制器。 – 2010-09-07 21:41:28