gpt4 book ai didi

ios - JSOG API 对象的 RestKit 映射

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:55:02 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何使用 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"}];

但是它是正确的吗?

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

最佳答案

使用映射本身添加关系,以便递归钻取。为引用使用外键映射。


在您的评论之后再次查看它实际上可能是动态映射而不是外键的一个很好的候选者。这意味着创建一个新的映射,它只使用 @"@ref": @"identifier" 进行连接,并创建一个动态映射,它查看键并决定是使用这个连接映射还是完整的用户映射

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

关于ios - JSOG API 对象的 RestKit 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34912268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com