2012-12-29 26 views
7

我正在使用魔法记录来促进核心数据操作。假设我们有一组这样的JSON和核心数据模型中定义如出一辙:现在使用魔法记录导入数据时避免重复条目

{ 
    "cars": [ 
     { 
      "name": "Corolla", 
      "brand": { 
       "name": "Toyota" 
      }, 
      "price": 20000 
     }, 
     { 
      "name": "Pirus", 
      "brand": { 
       "name": "Toyota" 
      }, 
      "price": 50000 
     }, 
     { 
      "name": "RAV-4", 
      "brand": { 
       "name": "Toyota" 
      }, 
      "price": 30000 
     }, 
     { 
      "name": "Golf", 
      "brand": { 
       "name": "VW" 
      }, 
      "price": 40000 
     }, 
     { 
      "name": "Polo", 
      "brand": { 
       "name": "VW" 
      }, 
      "price": 20000 
     } 
    ] 
} 

,如果我们用神奇的记录helper方法:

- (BOOL) MR_importValuesForKeysWithObject:(id)objectData; 

+ (id) MR_importFromObject:(id)data; 

它将作为5个条目的车辆和5个品牌的条目导入。

但是,在我们的核心数据模型中,汽车品牌关系是多对多关系,而品牌的名称属性应该是独一无二的,所以我预计有5个汽车品牌和2个品牌品牌丰田和大众)。

我的问题是如何在使用Core Data导入时保持数据唯一性。这是我可以在核心数据模型中定义的东西,就像独特的属性?还是我需要重写魔法记录的导入方法?

+0

你得到了这个答案吗? – Fogmeister

+0

我相当肯定你将不得不以编程方式解决这个问题,基于http://forums.pragprog.com/forums/90/topics/2875马库斯S. Zarra –

+0

根据http://www.cimgf.com/ 2012/05/29/imported-data-made-easy /看起来您可以添加'relatedByAttribute'键并将其映射到应该视为键的属性... – ChickensDontClap

回答

6

您需要告诉MagicalRecord什么是唯一标识符。在你的情况下,你没有唯一的ID,但你可以使用name属性。

假设你有一个Car NSManagedObject有一个Brand NSManagedObject的关系,你必须设置relatedByAttributename在用户信息字典关系到Brand

一旦你完成了这个MagicalRecord将查找任何记录的属性name,并使用适当的记录,如果已经存在,或创建一个如果需要。

这意味着您不必覆盖重要的类别类。

让我知道你是否需要更多的信息。