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 结果