2012-03-22 55 views
1

我对如何遵循Apple的标准来说,对于一个好的MVC模式设计特别感兴趣。让我用一个例子来说明我的问题。关注iOS MVC应用程序的分离

可以说我在屏幕上有一些相当复杂的UI元素,如UITableView。基本上这些元素需要一个数据源和一个委托来处理交互。

有两种方法来处理这个问题。

我可以有相同的子类UITableViewController处理所有元素,并根据请求UITableView动态处理事物。

第二种方法是使用“轻量级”控制器来管理每个单独的视图。在iOS 4.x中,您不允许拥有多个UIViewControllers,因此这些控制器更适合管理状态和交互。

我不喜欢第一种方法,因为它没有缩放和似乎结合的东西。如果我有多个不同类型的复杂对象会怎么样?

第二种方法似乎更好。对象被封装得更好 - 关注点分离。唯一的缺点似乎是通信的复杂性增加。轻量级控制器将不得不委托给真实的视图控制器,或者他们必须有一些手段来执行实际操作。

你对这两种方法有什么经验?是否有更好的解决方案来分解复杂的界面?

感谢

回答

1

你总是可以一个UITableView的委托和数据源重新分配到别的东西。它不一定是一个UITableViewController。只要它满足委托和数据源的协议方法中的一种。

因此,您可能有一个由nib/xib(由Interface Builder创建的视图)驱动的UIViewController(控制器)。在该界面中,您添加了一个tableview并将它的委托和数据源设置为文件所有者(回到控制器)。

然后,UIViewController可以与核心数据(模型)进行通信以检索相关对象以响应UITableView委托消息。或者,UIViewController可以将委托/数据源重新分配给满足协议的轻量级提供程序,以使其更加封装。

这是Apple建议的MVC风格。

+0

但是如果我有多个Tableviews,所有链接回相同的ViewController呢?如果每个表视图需要从各个点检索数据,而不仅仅是CoreData?然后,所述视图控制器需要分别处理每个tableview。在更大的UIViewController中拥有单独的控制器对象会不会更清洁? – EightyEight 2012-03-22 19:28:05

+0

不,不是。请记住,您可以指定数据源/委托为其他内容。因此,只需将其分配给另一个负责管理这些表视图的对象。无需“嵌套”UIViewControllers。 – 2012-03-22 20:20:26