我们使用RestKit来缓存来自远程Web服务的数据,类似于Stackoverflows API。
在API中有问题和标签,但不是在文本中获取标签,而是获得标签ID。
问题资源如下所示:
{
"items": [
{
"question_id": 11260172,
"tags": [
{ "tag_id" : 1},
{ "tag_id" : 2},
{ "tag_id" : 3}
],
"view_count": 1,
[...]
}
标签资源如下所示:
{
"items": [
{
"id": 1,
"name": "c#",
},
{
"id": 2,
"name": "java",
},
{
"id": 3,
"name": "php",
}]
}
我们想在问题和标签之间创建一个连接表,这样问题可以有很多标签,标签有很多问题。
我们有一对多工作,但不是很多很多的联接表。因此,我们想知道RestKit多对多映射应该如何寻找这样的关系,以及数据模型应该如何看待。
我们尝试了以下映射,但它并不是多对多的。
[tagMapping mapKeyPath:@"id" toRelationship:@"questions" withMapping:tagsQuestionsMappingMapping];
[questionMapping mapKeyPath:@"tags" toRelationship:@"tags" withMapping:tagsQuestionsMappingMapping];
答案 0 :(得分:1)
我们很清楚。由于这两个不同的Web服务中的根密钥相同,因此您需要使用两个不同的映射。
以下是问题终点的示例映射:
RKManagedObjectMapping* nested = [RKManagedObjectMapping mappingForClass: [NSDictionary class] inManagedObjectStore:nil];
[nested mapKeyPath: @"tag_id" toAttribute: @"id"];
RKManagedObjectMapping* questions = [RKManagedObjectMapping mappingForClass: [NSDictionary class] inManagedObjectStore: nil];
[questions mapAttributes: @"question_id", @"view_count", nil]; //I don't know your core data model...
[questions hasMany: @"tags" withMapping: nested];
[questions connectRelationship: @"tags" withObjectForPrimaryKeyAttribute: @"tag_id"];
以下是标签端点的示例映射
RKManagedObjectMapping* tags = [RKManagedObjectMapping mappingForClass: [Tag class] inManagedObjectStore: store];
[tags mapAttributes: @"id", @"name", nil];
注意:
1)标签映射每次都不同,因为每个Feed中的主键属性名称不同
2)我不知道您的核心数据地形,因此这些地图可能无法正常工作。您将需要了解我正在做什么,并为您的应用程序重做它。
3)你永远不用担心连接表。这由框架处理。