【发布时间】:2023-03-13 01:52:01
【问题描述】:
我对视图和视图控制器的职责感到困惑。
我已阅读Apple's Doc on MVC,但它没有说明任何回答我问题的明确示例。
我有一个简单的数据库应用程序,它从数据库中提取数据并使用 UITableView 显示它。
我的视图是自定义视图。它基本上是一个 在 UIView 中相邻显示的 UITableView 的集合,显示从数据库计算的数据。
我的视图控制器为每个 UITableview 实现了委托。
我有一个容器视图 (UIVIew),其中包含所有 UITableview 视图控制器:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath
{
UIView *containerForAllview = [tableview superview];
//container view contains list of dataset . each of which is displayed
// by it's own respective tableview
if(tableview = atableview){
array = containerForAllview.getDatafortable(atableview);
}else if(tableview = btableview){
array = containerForAllview.getDatafortable(btableview);
}
/// like this for few more tables
// configure cells using this array
cell.text = [array objectAtIndex:indexpath.row].name;
}
我觉得我的设计有些可疑。
- 视图控制器是否需要了解我的整个视图层次结构。最初我以为我的 ContainerView 会抽象一切。
- (负责处理用户事件)tableviews的委托应该由containerView或者我的viewcontroller来实现。
- 如果我的视图处理事件,那么我的 UIView 需要引用我的数据模型,这违反了 MVC 架构的概念。
- 我的容器视图持有列表数组来提供它的 tableviews 是错误的,还是我应该将该逻辑移动到视图控制器?
【问题讨论】:
-
对我来说听起来好像你的模型只是另一个(数据库)控制器。模型将是一个类,它保存来自数据库的一条记录。
-
我的模型是核心数据对象
-
比你的措辞很模糊。
-
是的,我不想提供有关我的模型的任何具体细节,因为该接口定义得很好。我对视图和视图控制器之间的界限感到困惑
-
但是在你写的时候,很多人会怀疑,你弄错了模型
标签: objective-c ios cocoa-touch model-view-controller design-patterns