使用RESTKit将URL参数映射到对象

8
有没有一种方法将URL中的参数映射到结果中?
我有一个rest服务,用户可以通过ID搜索某些内容。路径是“search/:id”。 结果包含名称和其他属性,但不包括ID。
我可以像这样做:
NSArray *array = mappingResult.array;
for (Item *item in array) {
        [item setId:itemID];
}

但我希望有一个更好的方式...

感谢任何提示
Xean

2个回答

7
你想在响应描述符中使用指定的路径模式。然后你想在映射过程中使用路由(RKRoute)和元数据。元数据包括一个路由部分,它可以访问从URL路径提取出来的参数。
有关元数据的一些信息在这里(文档有点简略)。
在映射过程中,你需要使用:
@metadata.routing.parameters.id

作为映射源关键路径。
为使路由正常工作,您需要将路由添加到您的对象管理器中:
[manager.router.routeSet addRoute:...

然后你需要以一种使用路由的方式进行请求,例如getObjectsAtPathForRouteNamed:object:parameters:success:failure:


你正在使用 RKRoute 吗?你需要展示你的映射、响应描述和路由配置来获取更多帮助。 - Wain
我的路由是 [RKRoute routeWithClass:[Item class] pathPattern:@"search/:id" method:RKRequestMethodGET];。响应描述符与 @micha-mazaheri 编写的相同。我使用 addAttributeMappingsFromDictionary: 添加了来自 @Wain 的映射。 - Obenland
好的,所以你创建了一个路由实例。你是否将其设置到对象管理器上,并且如何触发下载(以使用该路由)? - Wain
是的:[objectManager addResponseDescriptorsFromArray:[Item responseDescriptors]];。我调用[objectManager getObjectsAtPath:path parameters:nil success:(...) failure:(...)];来开始请求。我一直在调试以获取RKMappingOperation中元数据的键。映射正在工作,除了@metadata这个东西。路径是一个字符串,例如“search/123”。 - Obenland
只有当路径为nil时(请参见RKObjectManager第580行),才会添加“routing”字段。所以它不能工作,对吧? - Obenland
显示剩余2条评论

1
您可能需要指定响应描述符的pathPatternkeyPath
RKResponseDescriptor *responseDescriptor =
  [RKResponseDescriptor
   responseDescriptorWithMapping:itemMapping
   method:RKRequestMethodAny
   pathPattern:@"search/:id"
   keyPath:@"item"
   statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接