我有以下核心数据模型是我的应用程序:
+--------------------+ +-------------+
| Ingredient | | Dish |
+--------------------+ +-------------+
| id | | id |
| title | | title |
| dishId (transient) |
+--------------------+ +-------------+
| dishes | <<--->> | ingredients |
+--------------------+ +-------------+
我还有一个网络服务,它允许我请求给定菜的所有成分:
/dish/1/ingredients
(其中1
是一些菜肴ID。)
对此类回复的请求如下:
{
{ "id": "1", "title": "milk" },
{ "id": "2", "title": "egg" },
{ "id": "3", "title": "flour" }
}
我已经阅读了有关RKConnectionDescription的内容,但在这种特殊情况下,我无法弄清楚如何使用它来连接这两个实体。
这是我到目前为止的映射:
RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Ingredient" inManagedObjectStore:store];
[mapping setIdentificationAttributes:@[@"id"]];
[mapping addAttributeMappingsFromDictionary:@{
@"id" : @"id",
@"title" : @"title",
@"@metadata.dishId" : @"dishId"
}];
更新
我已向我的dishId
实体添加了一个新的瞬态属性Ingredient
,并试图像这样建立连接:
NSEntityDescription *entityDescription =
[NSEntityDescription entityForName:@"Ingredient" inManagedObjectContext:mainContext];
NSRelationshipDescription *relationship =
[entityDescription relationshipsByName][@"dishes"];
RKConnectionDescription *connection =
[[RKConnectionDescription alloc] initWithRelationship:relationship attributes:@{
@"dishId" : @"id"
}];
[mapping addConnection:connection];
但每当我要求另一道菜的配料时,它会用新的连接替换旧的连接,所以我基本上得到一对一的关系。例如,我首先要求煎蛋卷的配料,它将煎蛋连接到鸡蛋,牛奶和面粉。然后我要求煎饼配料,它将煎饼连接到鸡蛋,牛奶和面粉上,但煎蛋卷与这些配料的连接丢失了。
<{1}}上无法使用 assignmentPolicy
。
答案 0 :(得分:1)
您希望使用RKRoute
创建请求路径并为您提供所需的关系映射(您不需要自己执行此操作)。您需要将路径的路径模式设置为/dish/:id/ingredients
,以便从Dish
中提取标识并注入。
使用routeWithRelationshipName:objectClass:pathPattern:method:
创建路线。
使用getObjectsAtPathForRelationship:ofObject:parameters:success:failure:
获取内容。
一旦连接了路由,它将执行的任何映射都将提供URL内容元数据。因此,在您的映射中使用:
@"@metadata.routing.parameters.id" : @"dishId"
请注意,dishId
是您在外键映射(Ingredient
)中使用的RKConnectionDescription
添加的新瞬态属性。