0

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

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

在模型的 v2 中,我对其进行了改进,并添加了实体作者,其属性为名字和姓氏以及与书的关系。有谁知道我如何以这种方式自定义映射模型,它调用一个函数(返回作者的数量以及分开的名字和姓氏)并创建关于该函数输出的新实体?

谢谢 b00tsy

4

2 回答 2

3

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

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

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

这就是它的全部。

于 2010-06-22T15:19:33.037 回答
0

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

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

这是一个艰难的,你应该考虑的一个。

于 2010-06-22T13:55:17.483 回答