objective-c - CoreData自定义映射模型

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

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

在模型的 v1 中,我有一个名为 book 的实体,具有作者属性。我在那里保存了作者的名字和姓氏,甚至保存了几位作者的名字和姓氏。我知道设计很糟糕,但事实就是如此。

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

谢谢 b00tsy

最佳答案

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

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

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

这就是全部内容。

关于objective-c - CoreData自定义映射模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3093422/

相关文章:

objective-c - 是否可以观察 -visibleRect

objective-c - 在 Sublime Text 2 中获取 Cocoa 方法补全

macos - 这个方法的签名是什么?

c - read() 是否位于 Linux(OSX、FreeBSD)以外的平台上的非阻塞套接字 "greedy"上?

c++ - 如何在函数内部操作 char 数组(字符串)的指针,它在 c/c++ 中作为参数传递

javascript - 从 Objective-C 代码调用 javascript

cocoa - 如何在 Mac OS X 10.9 上检测 NaN 传递给 CoreGraphics API 的位置

ios - 创建家长控制应用程序 iOS

objective-c - 在 iOS 上将 NSString 转换为 NSDate 的正确方法?

python - 编译 Python 2.7.5 问题