CoreData:不同项目中来自公共基础实体的不同子类

时间:2010-12-18 20:51:06

标签: objective-c xcode core-data

我有一个通用模型框架,其中包含一些我想用于各种应用程序的实体和关系。对于每个应用程序,我想在其中一个实体上定义一组特定的属性。我认为每个应用程序都可以定义一个实体,它是基本实体的子实体,但如果子项位于不同的模型文件中,您似乎无法做到这一点。如果我将所有子实体放在同一个模型文件中,那么每个应用程序中的实体最终会得到所有应用程序的属性。

此时我唯一的解决方案是只拥有基本实体并使其属性为字典。然后,每个应用程序都可以编写NSManagedObject的子类,该子类定义在字典中查找适当值的属性。我认为可能存在这方面的问题。

还有其他想法,还是我的字典方法?谢谢!

2 个答案:

答案 0 :(得分:1)

我发布此内容时没有意识到的一件事是您可以通过编程方式修改模型。所以我开始在每个子项目中执行此操作,以使用项目特定的属性添加子实体。这解决了一段时间的问题。

但是,模型迁移是一个问题。我认为如果我在基础项目中的模型文件中更改了某些内容,我将能够使用自动迁移或映射文件来迁移子项目所做的任何数据存储。但是,由于子项目修改了模型,我将不得不加载旧模型,修改它,加载新模型,修改它,然后跨这两个模型执行迁移。

所有这些都很痛苦,所以我最终使用通用对象,属性和值表将我的数据库架构更改为更灵活的东西。现在每个子项目都可以投入任何想要定义新类型对象的数据。

答案 1 :(得分:0)

我遇到了同样的问题......我有一个基类,它定义了两个CD实体共有的属性和功能。但是当我尝试从超类中访问一个值时,我得到一个错误。

以下是我为解决这个问题所做的工作。

制作数据模型,并按常规生成类。手工创建超类,作为NSManagedObject的子类。赋予它与生成的类相同的结构,意味着没有声明的变量,使用@dynamic,NSNumber *作为数字等。

这对我有用。