2013-06-21 45 views
3

所以,我有几个NSManagedObject类的应用程序,我想提取一些逻辑,并把它变成一个独立的框架,在其他应用程序中使用。核心数据及私人框架

我有一个类一样,让我们​​说:

Employee 
- firstName    (an MOM property) 
- lastName    (an MOM property) 
- (NSString *)fullName (a method) 
- (NSUInteger)daysHired (an ObjC property) 
- etc... 

我很乐意提供这个类,它是MOM的定义,在一个框架。我认为这可以通过在框架中添加一个.mom,在那里定义Employee,在框架中构建类的.h和.m。当我想重用这个类时,我只需将其包含到项目的构建中,将框架中的.mom与应用程序的.mom合并,并且实体将可用。我猜?

但是,我没有看到如何从框架中取得一个实体def/NSManagedObject子类,然后子类化或扩展到一个新的应用程序中。为了让我的应用程序的NSManagedObjects和框架的抽象的人之间的关系,我不得不继承框架的实体 - 我不明白你怎么可以在另一个MOM文件中的一个文件MOM有关的entites到实体,无论是超类还是作为关系的目的地。

想法?是否有可能在框架中提供MOM?

回答

4

这是真的,这将是相当尴尬在编译托管对象模型扩展的实体,正是你描述的原因。当我看到它,你有几种选择,以方便降序排列:

  • 包括未编译.xcdatamodel而不是编译.mom。任何拥有编译模型的人都可以轻松地对其进行反向工程,所以它不会像这样提供任何额外的信息。使用原始模型,可以照常创建子实体。如果你担心现有实体的兼容性,加上在运行时检查,以查看Employee,并确保它看起来像您期望的(例如,检查实体描述的versionHash)。如果更新原始框架模型,则更改应该干净地合并 - 只要您为模型使用Xcode 4和更高版本的文件格式。
  • 在代码中创建子实体。模型编辑器没有什么魔力,你在这里做的所有事情都可以在代码中完成。在首次加载模型时创建和/或修改实体,方法是创建和/或修改NSEntityDescription的实例,然后在托管对象模型上调用setEntities。只要确保你在之前这样做了加载持久性存储,因为在加载存储文件后这样做会引发异常。
  • (最糟糕的)创建模型中的一个通用的key-value存储实体类型,并给予Employee实体类型一个一对多的关系吧。然后,您可以在运行时添加所需的任何键/值对,而无需创建新的子实体。

核心数据的设计并非真正考虑到这种用途,但这并不意味着它是不可能的。我会自己选择第一个选项,但其他人也会工作。

+0

......如果这是不够的,“接受”,并颁发了有恩惠,这将是很好,如果你想至少说为什么。 –

+0

厚脸皮哈哈哈。顺便说一句好的回答。 – Daniel

+0

对不起。我可能会做第二件事。 – iluvcapra