【问题标题】:iOS MVC: get view controller class from model?iOS MVC:从模型中获取视图控制器类?
【发布时间】:2012-04-09 18:17:36
【问题描述】:

我有一些由自定义 NSManagedObject 类管理的实体。它们被列在不同的视图控制器中。托管对象子类具有共同的抽象超类,它拥有共同的属性(假设它的 title 为 NSString 和 favorite 为 BOOL)。我有收藏夹的视图控制器,其中列出了所有具有favorite 属性的实体为真。由于收藏夹有不同的类 - 从这些托管对象的抽象超类的适当子类派生(或获取)视图控制器类是否正常?我在这里打破了 MVC 吗?

更新

对 sergio 的一些说明:假设我有抽象超类 Animal 和子类,如 Cat、Dog。这些实例代表个体动物(如有名字的动物)。然后我有 CatsViewController 和 DogsViewController。他们列出了适当的Animal 子类的实例。我还有代表托管对象的单个实例的 CatDetailsViewController 和 DogDetailsViewController。然后我有FavoritesViewController,它在一张表中列出了猫和狗。点击一行后,我想将用户带到适当的 CatDetail 或 DogDetail 视图控制器。这就是问题所在 - 我可以从托管对象的实例中派生/获取视图控制器的类。我也对实现这一点的其他选择持开放态度。

【问题讨论】:

  • 我会有一个 AnimalViewController,FavoritesViewController 会继承它。但除此之外,您的设计看起来还不错。

标签: ios model-view-controller core-data


【解决方案1】:

编辑(评论后):

这完全符合 MVC,IMO。您的FavoritesViewController 负责告诉您正在处理哪个对象并调用正确的特定控制器(CatDetail 或 DogDetail 视图控制器)。它仍然嵌入有关您的应用程序和模型的业务逻辑的知识,并且视图与它正确分离。你看,最后FavoritesViewController和DogsViewController/CatsViewController之间并没有太大的区别;唯一的区别是FavoritesViewController 知道两种类型的数据,而不是只知道一种。

旧答案:

我不确定我是否完全理解您的情况,但据我了解,我会说您可能会破坏一点封装原则;然后,归结为您是如何做的,即,如果您使用工厂,或者您如何根据模型信息实例化您的特定控制器。

至于 MVC,我认为您并没有专门破坏它。只要“控制器”负责创建您的特定控制器类,您就可以在其范围内进行游戏。

好吧,对此持保留态度,因为我对您在做什么只有非常部分的了解。无论如何,希望它有所帮助。

【讨论】:

  • 感谢您的意见。请查看问题的更新。)
猜你喜欢
  • 2012-06-10
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 2015-01-19
  • 1970-01-01
  • 2015-10-14
  • 2020-02-17
相关资源
最近更新 更多