我有一些由自定义 NSManagedObject 类管理的实体。它们被列在不同的 View Controller 中。托管对象子类具有公共(public)抽象父类(super class),它拥有公共(public)属性(假设其 title
为 NSString 和 favorite
为 BOOL)。我有收藏夹的 View Controller ,它列出了,以及......所有具有 favorite
属性的实体。由于收藏夹具有不同的类 - 从这些托管对象的抽象父类(super class)的适当子类派生(或获取) View Controller 类是否正常?我在这里破坏了 MVC 吗?
更新
对 sergio 的一些说明:假设我有抽象父类(super class) Animal
和子类,例如 Cat
、Dog
。这些实例代表个体动物(如有名字的动物)。然后我有 CatsViewController 和 DogsViewController。它们列出了适当的 Animal
子类的实例。我还有 CatDetailsViewController 和 DogDetailsViewController,它们代表托管对象的单个实例。然后我有 FavoritesViewController,它在表格中列出了猫和狗。点击一行后,我想将用户带到适当的 CatDetail 或 DogDetail View Controller 。这就是问题所在——我能否从托管对象的实例中派生/获取 View Controller 的类。我也愿意接受实现这一点的其他选择。
最佳答案
编辑(评论后):
这完全符合 MVC 标准,IMO。您的 FavoritesViewController
负责告诉您正在处理哪个对象并调用正确的特定 Controller (CatDetail 或 DogDetail View Controller )。它仍然嵌入了有关您的应用程序和模型的业务逻辑的知识,并且 View 与其正确分离。你看,最后,在 FavoritesViewController
和 DogsViewController
/CatsViewController
之间并没有太大区别;唯一的区别是 FavoritesViewController
知道两种类型的数据,而不是只知道一种。
旧答案:
我不确定我是否完全理解你的场景,但据我了解,我会说你可能会打破封装原则;然后,它归结为你是如何做的,即,如果你使用工厂,或者你如何根据模型信息实例化你的特定 Controller 。
至于MVC,我认为你并没有具体破坏它。只要“ Controller ”负责创建您的特定 Controller 类,您就在其边界内玩耍。
好吧,请对此持保留态度,因为我对您的工作只有非常片面的了解。无论如何,希望对您有所帮助。
关于iOS MVC : get view controller class from model?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9868833/