模型,视图和控制器之间的连接

时间:2013-12-31 15:55:52

标签: ios model-view-controller

我经常搜索并阅读了很多关于MVC概念的内容。但我仍然不知道如何将它们连接在一起。假设我有一个控制器类,视图类和模型类。如果用户在该视图中执行了某些操作,则视图应通知控制器操作,并且控制器可能需要与模型通信以获取某些数据。

  1. 现在,视图是否包含对控制器的引用?控制器是否具有该模型的属性?或者他们只是使用" include"?
  2. 数据是保存在内存还是数据库中?内存意味着存储在变量中。
  3. 更复杂的情况,来自用户的一个动作可能需要涉及许多控制器和模型。如何协调他们?
  4. 之前我做过的是创建一个"视图控制器",它具有该视图的视图和一些动作。 有时候没有模特。所有数据都通过参数传递。如果有一些模型,其中一些是单身,所以我可以在任何地方得到它。

2 个答案:

答案 0 :(得分:5)

这是一个非常通用的答案,取决于您的系统,这些可能会有所不同:

  1. Controller引用了View,例如IBOutlet。 View不知道Controller,接收信息并显示它是一件蠢事,就是这样。

  2. 取决于您所拥有的内容,有时您不需要保留数据并且只需要变量即可。对于持久化数据,您可以使用CoreData,plists或将它们保存在沙箱中。

  3. 通常你可以有一个父控制器,持有对子控制器的引用。每个孩子都应该是独立的,父母应该是他们之间的“粘合剂”。
  4. 我可以向您指出我创建的这个名为iOS Architecture的回购,以帮助您了解控制器和模型如何相互作用。

答案 1 :(得分:0)

以下是一些要点:

  1. 当你的Action返回一个View(“SomeView”)时,它会首先检查你是否有一个布局,如果没有,它会在该控制器的Views文件夹中找到SomeView.cshtml。
  2. 如果您希望SomeView与控制器中的任何Action对话,您可以做的是执行FormMethod.Post并分配正确的模型,当然还有Action名称。该动作名称应使用[HttpPost]进行修饰,或者您可以使用[HttpGet]进行FormMethod.Get修饰或将其保留为空白,因为[HttpGet]是默认值。
  3. 如果您希望其他操作首先重定向到另一个操作而不转到页面,则使用RedirectToAction()而不是View,并将类型更改为ActionResult而不是ViewResult
  4. 我希望你有意义:))