使用 RESTKit 将 url 参数映射到对象
Posted
技术标签:
【中文标题】使用 RESTKit 将 url 参数映射到对象【英文标题】:Map url parameters to objects using RESTKit 【发布时间】:2013-08-19 22:19:14 【问题描述】:有没有办法将 URL 中的参数映射到结果?
我有一项休息服务,用户可以通过其 ID 搜索某些内容。路径是search/:id
结果包含名称和其他属性,但不包含 ID。
我可以这样做:
NSArray *array = mappingResult.array;
for (Item *item in array)
[item setId:itemID];
但我希望有更好的方法...
感谢任何提示 西恩
【问题讨论】:
【参考方案1】:您想使用您在响应描述符中指定的路径模式。然后,您想在映射期间使用路由 (RKRoute
) 和元数据。元数据包括一个路由部分,可以访问从 URL 路径中提取的参数。
关于元数据here 的一些信息(文档有点缺乏)。
在您要使用的映射中:
@metadata.routing.parameters.id
作为映射源键路径。
要使路由工作,您需要将路由添加到对象管理器:
[manager.router.routeSet addRoute:...
然后您需要以使用路由的方式发出请求,例如getObjectsAtPathForRouteNamed:object:parameters:success:failure:
。
【讨论】:
这是正确的方法。我的问题是@metadata.routing
不存在。
你在使用RKRoute
吗?您将需要展示您的映射、响应描述符和路由配置以获得更多帮助...
我的路线是[RKRoute routeWithClass:[Item class] pathPattern:@"search/:id" method:RKRequestMethodGET];
。 ResponseDescriptor 和@micha-mazaheri 写的一样。我使用addAttributeMappingsFromDictionary:
添加了来自@Wain 的映射
好的,所以你创建了一个路由实例。您是否将其设置到对象管理器上以及如何触发下载(使用路由)?
是的:[objectManager addResponseDescriptorsFromArray:[Item responseDescriptors]];
。我打电话给[objectManager getObjectsAtPath:path parameters:nil success:(...) failure:(...)];
开始请求。我正在调试以获取RKMappingOperation
中元数据的密钥。除了 @metadata
之外,映射正在工作。路径是类似“search/123”的字符串【参考方案2】:
您可能需要指定 响应描述符::
的pathPattern
和 keyPath
RKResponseDescriptor *responseDescriptor =
[RKResponseDescriptor
responseDescriptorWithMapping:itemMapping
method:RKRequestMethodAny
pathPattern:@"search/:id"
keyPath:@"item"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
【讨论】:
以上是关于使用 RESTKit 将 url 参数映射到对象的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 RestKit 将日期组件字典映射到 NSDate
使用 RestKit 将一个裸露的 URL 数组映射到核心数据实体