2

我试图弄清楚如何使用RestKitAPI将响应映射到 CoreData 对象。使用JSOG标准。这是一个例子:API

[
    {
        "@id": "1",
        "name": "Sally",
        "friend": {
            "@id": "2",
            "name": "Bob",
            "friend": {
                "@id": "3",
                "name": "Fred",
                "friend": { "@ref": "1" }
            }
        }
    },
    { "@ref": "2" },
    { "@ref": "3" }
]

我将如何创建一个RKEntityMapping这样的JSON?简单属性的映射是微不足道的,问题是如何在此处设置关系,以便它们与@ref,当顶级用户对象包含@ref唯一时。

RKEntityMapping *userMapping = [RKEntityMapping mappingForEntityForName:@"Question"
                                                   inManagedObjectStore:[RKObjectManager sharedManager].managedObjectStore];

[userMapping addAttributeMappingsFromDictionary:@
 {
     @"@id" : @"identifier",
     @"name" : @"name"
 }];

[userMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"friend"
                                                                            toKeyPath:@"friend"
                                                                          withMapping:userMapping]];

我的猜测是我可以使用下面的代码来处理@ref对象的内部:

[userMapping addConnectionForRelationship:@"friend" connectedBy:@{@"@ref": @"@id"}];

但它是正确的吗?

  1. 如何将完整对象或仅对已提供对象(通过@ref)的引用映射到实际的 Core Data 对象?
  2. 如何将 JSON 的顶级元素(作为User对象列表)映射到实际的User实体列表?
4

1 回答 1

2

使用映射本身添加关系,因此它递归地钻取。对 refs 使用外键映射。


在您发表评论后再次查看此内容,它实际上可能是动态映射而不是外键的良好候选者。这将意味着创建一个仅@"@ref" : @"identifier"用于连接的新映射和一个查看键并决定使用此连接映射还是完整的动态映射userMapping

请注意,这两个映射都需要指定这identifier是对象的唯一键,并且您应该使用内存缓存来允许找到现有对象而不是创建重复项。

于 2016-01-20T23:26:42.810 回答