objective-c - NSMappingModel 的编程创建

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

我想以编程方式(没有轻量级迁移)在两个完全相同的模型之间创建一个映射模型,除了其中一个实体(有一堆实体)具有不同的属性。我们称这个实体为“人”。假设目标模型有

1) 添加了一个名为“address”的新属性

2) 删除了一个名为“eyeColor”的属性

3)保留(即不做任何事情)名为“name”的属性

如何以编程方式在这些模型之间创建 NSMappingModel?我碰巧有一些明确的问题可以帮助我自己做到这一点:

Q1)我是否必须为除“Person”之外的所有实体创建 NSEntityMapping 对象,即使它们保持不变?

Q2) 如何处理新创建的“Person”中的“address”属性?我应该以某种方式为此创建一个 NSPropertyMapping ,将什么都变成某种东西(“地址”)吗?

Q3) 如何处理“Person”中的“name”属性?我是否必须为此创建一个 NSPropertyMapping,即使它只是保持不变?

Q4) 对于“Person”对应的 NSEntityMapping,为“eyeColor”创建任何 NSPropertyMapping 是否是删除它的正确方法?或者我应该为“eyeColor”创建一个 NSPropertyMapping ?如果是,如何创建该对象,即什么可以确定其目的是摆脱“eyeColor”?

提前谢谢您,很抱歉我自己无法回答这些问题,因为文档确实没有关于如何以编程方式创建 NSMappingModel 的好示例。再次注意,我不允许使用轻量级迁移。我必须手动执行此操作。

最佳答案

我一直使用 Xcode 的自动映射功能,但在我看来,你也可以从中学到很多东西。制作源模型(部分)的模型,添加版本,修改它以反射(reflect)目标模型并生成映射模型(菜单设计>>映射模型)。如果您随后按住 Ctrl 键单击 Xcode 为您生成的 .xcmappingmodel 并告诉 Finder 显示包的内容,您将在其中找到一个列出所有映射的 XML 文件。您可以使用 xml 作为指南来帮助您在代码中重新创建流程。祝你好运。

关于objective-c - NSMappingModel 的编程创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2512387/

相关文章:

cocoa - 如何从 xib 文件加载并显示窗口

cocoa - 在 NSView 中执行拖放时出现 kCGErrorFailure

ios - 在我的 View Controller 中,我添加了一个具有 xib 的 subview ,我在 xib 中设置了自动布局,但是当我将 View 添加到 View Controller 时它不起作用

cocoa - 跨多个 NSMenu 共享 NSMenuItem

core-data - numberOfRowsInSection : method for core data and multiple sections

ios - 尝试保存数组时 CoreData 出错。 'Cannot convert value of type ' String' 到预期参数类型 'NSManagedObject' '

ios - 如何在 Core Data Swift 的关系中建立简单的连接

objective-c - 如何实现返回运行时确定的大型结构类型的 IMP 函数?

ios - 如何添加被拒绝进行测试的旧版本

ios - 如何创建一个包含 2 个 iOS 项目和一个 iOS 动态框架项目的 Xcode 6 工作区?