RestKit 响应中的附加数据

Posted

技术标签:

【中文标题】RestKit 响应中的附加数据【英文标题】:RestKit additional data in response 【发布时间】:2014-03-05 18:57:30 【问题描述】:

我正在使用 RestKit 将数据从我的 api 映射到 CoreData 实体,我想知道如何从响应中获取其他数据。例如我的 api 返回结构,如:


    "items": [
        
            "id": 1,
            "title": "Title"
        ,
        
            "id": 2,
            "title": "Title 2"
        
    ],
    "someParameter": "someValue"

我已经有共享对象管理器的正确映射,所以我只发送请求:

[[RKObjectManager sharedManager] getObjectsAtPath:@"_api/items"
                                       parameters:parameters
                                          success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 
                                              //handle success
                                          
                                          failure:^(RKObjectRequestOperation *operation, NSError *error) 
                                              //handle error
                                          ];

如何在success 块中获得someParameter 值?这可能吗?

【问题讨论】:

【参考方案1】:

您需要稍微调整映射。如果您按如下方式更改它,您应该能够让 RESTkit 为您解析“someParameter”属性。您需要有两个类(Parent 和 Child)。

Parent 类有 2 个属性(someParameter 和 Child 对象数组)。 addRelationshipMappingWithSourceKeyPath 将父对象映射和子对象映射联系在一起。

代码:

RKObjectMapping *parentMapping = [RKObjectMapping mappingForClass:[Parent class]];
[beaconActionMapping addAttributeMappingsFromDictionary:@
                                                          @"someParameter" : @"someParameter"
                                                         ];


RKObjectMapping *childMapping = [RKObjectMapping mappingForClass:[Child class]];
[beaconMapping addAttributeMappingsFromDictionary:@
                                                  @"id" : @"childId",
                                                  @"title" : @"title"
                                                  ];


[parentMapping addRelationshipMappingWithSourceKeyPath:@"items" mapping:childMapping];

类层次结构:

@interface Parent : NSObject
@property(nonatomic,strong) NSString *someParameter;
@property(nonatomic,strong) NSArray *items;  // Array of Child objects
@end

@interface Child : NSObject
@property(nonatomic,strong) NSString *childId;
@property(nonatomic,strong) NSString *title
@end

【讨论】:

【参考方案2】:

您可以添加一个额外的响应描述符,其键路径为someParameter。您可以将其与 nil 键路径映射一起使用,以将字符串值提取到您选择的对象(通常是自定义类)中。

【讨论】:

以上是关于RestKit 响应中的附加数据的主要内容,如果未能解决你的问题,请参考以下文章

RestKit 映射结果已填充,但未设置核心数据实体

使用 RestKit 处理原始数据的响应

RestKit 可以接收异步响应吗?

restkit,如何在没有对象映射的情况下访问对象

在 iOS 的 RestKit 中执行 postObject 时忽略响应

为啥 RestKit 会更改我的响应内容类型?