【问题标题】:Avoid duplicated entries when importing data with Magical Record使用 Magical Record 导入数据时避免重复条目
【发布时间】:2012-12-14 16:08:24
【问题描述】:

我正在使用 Magical Record 来促进 Core Data 操作。想象一下,我们有一组这样的 json,并且定义了一个完全相同的 Core Data 模型:

{
    "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
        }
    ]
}

现在,如果我们使用 Magical Record 辅助方法:

- (BOOL) MR_importValuesForKeysWithObject:(id)objectData;

+ (id) MR_importFromObject:(id)data;

它将作为 5 个 Car 条目和 5 个 Brand 条目导入。

但是,在我们的核心数据模型中,Car-Brand 关系是多对多的,并且 Brand 的 name 属性应该是唯一的,所以我预计 Car 有 5 个条目,Brand 有 2 个条目(Toyota和大众)。

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

【问题讨论】:

  • 你得到答案了吗?
  • 我很确定您必须根据 Marcus S. Zarra 的 forums.pragprog.com/forums/90/topics/2875 以编程方式解决此问题
  • 根据cimgf.com/2012/05/29/importing-data-made-easy 看来,您可以添加一个“relatedByAttribute”键并将其映射到应视为键的属性...
  • 对了,为什么是多对多的关系呢?如果你有一个Car,它只能是一个品牌,那么从BrandCar的关系应该是一对一的

标签: core-data magicalrecord


【解决方案1】:

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

假设您有一个与Brand NSManagedObject 有关系的Car NSManagedObject,您必须在用户信息字典中与Brand 的关系上将relatedByAttribute 设置为name

完成后,MagicalRecord 将查找具有属性 name 的任何记录,如果已存在则使用适当的记录,或者在需要时创建一个。

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

如果您需要更多信息,请告诉我。

【讨论】:

    猜你喜欢
    • 2013-03-10
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    相关资源
    最近更新 更多