使用 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】:

您可能需要指定 响应描述符::

pathPatternkeyPath
RKResponseDescriptor *responseDescriptor =
  [RKResponseDescriptor
   responseDescriptorWithMapping:itemMapping
   method:RKRequestMethodAny
   pathPattern:@"search/:id"
   keyPath:@"item"
   statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

【讨论】:

以上是关于使用 RESTKit 将 url 参数映射到对象的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 RestKit 将日期组件字典映射到 NSDate

使用 RestKit 将一个裸露的 URL 数组映射到核心数据实体

RestKit:将单个对象映射到现有数组

使用 restkit 映射到复杂对象

使用 RestKit 将 JSON“关联数组”映射到 CoreData

RestKit 将未嵌套关系映射到拥有对象