【发布时间】:2015-03-27 02:37:36
【问题描述】:
我实际上是 Objective C 的新手。我在 Objective C 中做一些项目只有 4 个月。而且我已经尽我所能在我的项目中实现 MVC,尽管它可能很简陋。
所以到目前为止我所学到的基本上是(简单地说):模型:数据和逻辑。查看:图形输出。控制器:输入和更新模型/视图。 CMIIW。所以基本上控制器是中间人,它只是为模型内部的逻辑提供输入,然后接收模型的输出以在视图中转换为图形表示,对吗?并且这些信息将通过委托相互传递,对吗?
如果有这个案例研究:
我有一个控制器,它有一个视图(将从情节提要中自动创建)和许多子视图。我们将这些子视图(及其模型)称为 A、B 和 C。
所以我会有这些课程:
A_Model、B_Model、A_View、B_View 和 ViewController
还有这些代表:
A_ModelDelegates、B_ModelDelegates、A_ViewDelegates、B_ViewDelegates,都应该放到ViewController类中。
比如说,如果A_View 中有UITextView 和UIButton,B_View 中有UITableView 和UIImageView。
应用程序的流程是这样的:
A_View 对象中的 textView 将获取输入,并且其中有一个 IBAction 方法用于调用 A_ModelDelegates 中的一个委托将输入数据发送回 ViewController 对象。这反过来会将数据发送到A_Model 对象并进行处理。然后模型会将其发送回控制器以更新A_View对象,并将B_Model对象作为B_View中tableView和imageView参数的输入。现在 tableView 使用 AFNetworking 库从网络序列化。所以B_Model 将获取数据作为NSDictionary 对象并通过其委托将其发送回控制器。并且控制器将使用它来填充和更新B_View 对象中的tableView。
现在我的问题是:
这样的MVC思路正确吗?
控制器的主要工作只是作为模型、视图及其各自代表(可能非常大的集合)实例的容器。而且它只会在它们之间传递数据?
- 如果我们使用AFNetworking从
B_Model对象中的网络获取数据,应该有成功和失败 块在里面,对吧?在故障块中,如果我们想发出警告对话框,AFAIK 我们有两种不同的方法来做到这一点,在 iOS 7 中使用UIAlertView在 iOS 8 中使用UIAlertController。我们应该把它放在哪里?该模型?控制器?还是风景? - 我的印象是它应该放在控制器内部,因为
UIAlertControllerthere's this line:[self presentViewController:alert animated:YES completion:nil];这是正确的吗?那么我是否还必须将UIAlertViewDelegate放入容器中,并在需要时通过模型的委托从模型内部执行它们(例如,在模型无法从网络获取数据时在失败框中)?如果有很多警报视图怎么办? - 而对于tableView的序列化,我应该把数据源和委托放在哪里呢?控制器还是视图?模型不应该知道视图,所以数据源和委托不应该放在那里,对吗?如果我们想把它放在控制器中,如果有很多表视图会被放入不同的子视图中怎么办?如果有很多表视图,数据源和委托方法会非常大,因为每个表视图的所有输入/输出都必须放在那里。
- 还是按照上面的问题。我的序列化方式正确吗?模型从网络获取数据并将它们制成字典,该字典将通过其委托传递给控制器。然后字典将用于填充表格视图。
提前致谢。
【问题讨论】:
标签: ios objective-c iphone uitableview model-view-controller