我在将以下情况从核心数据模型的v1映射到v2时遇到问题。
在模型的v1中,我有一个名为book的实体,其中包含属性author。在那里,我保存了作者的名字和姓氏,甚至还保存了几位作者的名字和姓氏。我知道非常差的设计,但事实就是如此。
在模型的第2版中,我做得更好,并为实体作者添加了属性firstname和lastname以及与book的关系。有没有人知道如何以这种方式自定义映射模型,它调用一个函数(返回作者的数量和分隔的名字和姓)并创建关于该函数输出的新实体?
由于 b00tsy
答案 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”之类的呢?那些使用“中间名”的作者呢?
这是一个很难和你应该考虑的问题。