相同 pathPattern 的 RestKit 多个响应描述符

Posted

技术标签:

【中文标题】相同 pathPattern 的 RestKit 多个响应描述符【英文标题】:RestKit multiple response descriptors for the same pathPattern 【发布时间】:2014-08-20 14:28:51 【问题描述】:

有没有办法定义 2 个或多个响应描述符都具有相同的 pathPattern?我的假设是,它们不仅会根据pathPattern 匹配,还会根据method 匹配。但显然情况并非如此。

这是我的对象映射:

RKObjectMapping *commentMapping = [RKObjectMapping mappingForClass:[Comment class]];
[commentMapping addAttributeMappingsFromArray:@[@"comment", @"rating", @"views", @"venue", @"user_views"]];

当我发出 GET 请求时,我会得到一个类似这样的列表:


    'meta': 
        'total_objects': 2,
        'limit': 20,
        ...
    ,
    'objects': [
         
             'comment': '...',
             'rating': 3.5,
             ...
         ,
         ...
    ]

当我发出一个 POST 请求来创建一个新对象时,我得到的结果是这样的:


    'comment': '...',
    'rating': 3.5,
    ...

所以我想做的是定义两个不同的responseDescriptors——一个用于每个请求方法。所以这就是我所做的:

[objectManager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:commentMapping
                                                                                  method:RKRequestMethodGET
                                                                             pathPattern:@"comment/"
                                                                                 keyPath:@"objects"
                                                                             statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];

[objectManager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:commentMapping
                                                                                  method:RKRequestMethodPOST
                                                                             pathPattern:@"comment/"
                                                                                 keyPath:nil
                                                                             statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];

问题是,总是使用第二个(带有nil keyPath 的那个)。即使对于 GET 请求。这真的把事情搞砸了。

我做错了什么?或者有什么办法可以在这里做我想做的事吗?

【问题讨论】:

你好,我的情况和你一样。你想好怎么解决了吗? 【参考方案1】:

RKObjectManager 有一个名为 *addResponseDescriptorsFromArray:(NSArray ) 的方法。您需要将两个响应描述符添加到 NSArray,然后将 NSArray 传递给此方法。

你可以在这里找到更多关于该方法的信息http://restkit.org/api/latest/Classes/RKObjectManager.html#//api/name/addRequestDescriptorsFromArray:

【讨论】:

以上是关于相同 pathPattern 的 RestKit 多个响应描述符的主要内容,如果未能解决你的问题,请参考以下文章

RestKit:如何使用路由发布对象?

RESTKit:BaseURL 和路径模式

意图过滤器和 android:pathPattern

自定义 pathPattern 的意图过滤器

如何在 android pathPattern 中匹配 `?session`

需要使用 RestKit 创建多个相同的实体