CoreData自定义映射模型

时间:2010-06-22 13:16:09

标签: objective-c cocoa macos core-data mapping-model

我在将以下情况从核心数据模型的v1映射到v2时遇到问题。

在模型的v1中,我有一个名为book的实体,其中包含属性author。在那里,我保存了作者的名字和姓氏,甚至还保存了几位作者的名字和姓氏。我知道非常差的设计,但事实就是如此。

在模型的第2版中,我做得更好,并为实体作者添加了属性firstname和lastname以及与book的关系。有没有人知道如何以这种方式自定义映射模型,它调用一个函数(返回作者的数量和分隔的名字和姓)并创建关于该函数输出的新实体?

由于 b00tsy

2 个答案:

答案 0 :(得分:3)

首先,在源模型和目标模型之间创建映射模型。从那里,您希望在映射模型中选择要处理此拆分的对象。在映射模型编辑器的右侧,您将看到可以将类命名为NSEntityMigrationPolicy的位置。通过在此处添加自定义映射策略类,您可以告诉迁移使用您的代码而不是标准代码。

从那里创建类并使其成为子类NSEntityMigrationPolicy。该类的内部覆盖方法-createDestinationInstancesForSourceInstance: entityMapping: manager: error:。每个对象将调用此方法一次,您有责任创建目标对象并将所有属性从源复制到目标。作为该副本的一部分,您可以按照您认为合适的逻辑将名称拆分为名字和姓氏。在该方法结束时,请确保调用-associateSourceInstance: withDestinationInstance: forEntityMapping:,以便NSMigrationManager知道新创建的目标对象,其余迁移将正常工作。

注意:除非您需要为这些方法编写自定义代码,否则不需要覆盖任何与关系相关的方法。

这就是它的全部内容。

答案 1 :(得分:0)

Core Data Model Versioning and Data Migration Programming Guide向您展示了如何进行迁移部分。

至于名字/姓氏的分离,你可能会遇到问题。你在哪里分开名/姓?按空格?那么“Del Torres”之类的呢?那些使用“中间名”的作者呢?

这是一个很难和你应该考虑的问题。