【问题标题】:CoreData customize mapping modelCoreData 自定义映射模型
【发布时间】:2010-06-22 13:16:08
【问题描述】:

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

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

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

谢谢 b00tsy

【问题讨论】:

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


    【解决方案1】:

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

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

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

    仅此而已。

    【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 嗨乔希,感谢您的回答。我有你提到的问题,我已经阅读了迁移指南,但我还没有找到答案,关于如何将这样的功能集成到映射模型中。是否有可能,或者我必须在迁移后通过一种方法修改所有实体?例如我只是让映射模型完成它的日常工作,然后我将每个作者实体手动拆分...
    • 迁移指南的自定义迁移过程部分回答了这个一般问题。您需要更具体地说明您遇到的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多