尽管有主键,但MagicalRecord关系映射会复制对象

时间:2013-01-30 02:42:23

标签: ios core-data nsmanagedobject magicalrecord

我需要一些帮助来解决我在使用MagicalRecord数据导入时遇到的问题。我的印象是MagicalRecord能够通过查看主键(relatedByAttribute)来处理关系映射而不会复制对象。

这是一个简单的JSON:

[
  { 
    parentId: "<unique id>",
    parentName : "<name>",
    children : [
                  {
                     childId: "<unique id>",
                     childName: "<name>"
                  },
                  {
                     childId: "<unique id>",
                     childName: "<name>"
                  }
               ]
  },
  { <another parent with children> }
]

我有一个NSManagedObject Parent,它与Child NSManagedObject有很多关系。关系名称为children,我已将relatedByAttribute ChildParent分别设置为childIdparentId

当我解析JSON时,Parent没有重复,它正确检查主键并使用现有对象(如果存在)。但是对于Children,每次解析JSON时它都会复制对象。如果我单独解析Children(因此JSON只包含带有子词典的数组),那么正确映射数据并使用数据库中已存在的Children的现有对象没有问题。

我是否误解并对MagicalRecord如何映射关系抱有错误的期望?目前我已经设置了一个带有'importChildren:`的扩展类,我可以手动处理所有的查找并相应地创建/导入对象。

谢谢!

1 个答案:

答案 0 :(得分:11)

我设法解决了这个问题。

我所做的是在relatedByAttribute关系的用户信息词典中为children实体添加Child

因此,点击关系并将relatedByAttribute设置为childId(在我上面的示例中),然后点击左侧的子实体,同时将relatedByAttribute设置为{{ 1}}在实体本身的用户信息字典中。

这允许魔法记录使用现有对象正确映射或在需要时创建新对象 - 授予ID属性100%唯一!

enter image description here