【问题标题】:iPhone MVC. Problems with the modeliPhone MVC。模型问题
【发布时间】:2011-04-09 10:02:16
【问题描述】:

我是编程新手,特别是 iphone 应用程序编程。在阅读了一堆关于 MVC 的内容后,我决定在一个小型应用程序中尝试一下。据我了解,MVC 是这样工作的:

模型:数据、操作数据、检索数据。 ViewController:格式化模型中的数据(NSDate 到特定样式)等。 查看:实际的 gui。

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

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

我读过委托方法、单例方法、NSNotification(我曾经在其他类中调用方法)。问题是我并不真正了解如何使用这些技术将数据从模型传递到其他视图。

如果我的问题不清楚,请告诉我。

【问题讨论】:

    标签: iphone model-view-controller model view controller


    【解决方案1】:

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

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

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

    【讨论】:

    • 你能给我一个例子,说明如何从 ViewController 类访问 twitter 类中的数据吗?这是我的主要问题。我想我了解 mvc,我只是不太了解如何在模型和控制器之间处理数据。
    • 从视图控制器创建 twitter 对象后,您可以通过在 twitter 类中创建的 getter 和 setter 访问任何数据。 twitter 类将处理与它自己的数据操作和处理有关的所有逻辑。您可以从视图控制器中调用它们。例如,您将创建 twitter 对象: twitterObject *t = [[twitterObject alloc] init...];然后从您的视图控制器中,您可以通过 getter 访问数据,例如 t.username 或 t.tweets 等。
    • 这正是我需要看到的。谢谢!
    【解决方案2】:

    对应用程序的控制驻留在控制器中,因此它将检索或保存持久数据、使用该数据更新视图以及处理各种事件的对象。认为它是模型和视图之间的粘合剂!

    例如,如果您要单击一个按钮以打开一个新的模态视图,您将在视图控制器中处理该事件。在响应单击按钮的方法中,您将创建或访问新的视图控制器并使用 presentModalViewController:animated: 呈现它。如果新视图和控制器需要当前控制器可以访问的数据,您可以在新控制器中设置一个属性来引用该对象。

    【讨论】:

    • 我明白了。但是我仍然不明白如何在模型和控制器之间传递对象。在模型中说我有 NSArray *myArray = some array.
    • 如何访问控制器中的那个数组?
    • 您将从定义或访问控制器中的模型对象开始,就像您最初在委托中使用字符串所做的那样。模型不需要知道关于视图或控制器的任何信息。它是了解模型和视图的控制器。
    • 那么在应用程序委托中制作对象以便在其他类中轻松访问是可以接受的吗?出于某种原因,我认为最好使用单例、委托或其他技术。
    猜你喜欢
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多