JSOG API 对象的 RestKit 映射

Posted

技术标签:

【中文标题】JSOG API 对象的 RestKit 映射【英文标题】:RestKit mapping for JSOG API object 【发布时间】:2016-01-20 22:58:26 【问题描述】:

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

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

我如何为这样的JSON 创建一个RKEntityMapping?简单属性的映射是微不足道的,问题是如何在此处设置关系以便它们与@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"];

但它是正确的吗?

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

【问题讨论】:

【参考方案1】:

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


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

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

【讨论】:

感谢您的回答!!我取得了进步,但我认为我没有完全得到它。我更新了我的问题,澄清了现在是什么阻碍了我。请看一看。我将如何创建外键映射? 我和@Bearwithme 的情况一样,Wain 的提议就像一个魅力!但是,我想知道一件事:是否可以在键路径前加上 @ 符号? 我似乎记得这是由于 KVC @ahaese 造成的问题 感谢您的反馈!真的很有帮助!

以上是关于JSOG API 对象的 RestKit 映射的主要内容,如果未能解决你的问题,请参考以下文章

使用 RESTKit 映射 iTunes 搜索 API 结果

RestKit 仅用于对象映射

RestKit 对象映射将 ID 映射为完全不同的负数

在 Restkit 执行映射操作之前删除 Core data 中的现有对象

使用restkit api目标c调用Web服务时出错

RestKit 0.20:restkit 对象映射使属性映射加倍