1

可以为相同的 pathPattern 添加几个响应映射吗?

我有下一个情况:

    获取请求:
    RKEntityMapping * restDayMapping = [RestDay entityMapping];
    RKResponseDescriptor * restDayDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:restDayMapping pathPattern:@"program/restdays" keyPath:@"rest_days" statusCodes:statusCodes];
          [经理 addResponseDescriptor:restDayDescriptor];

    提出要求:
    RKObjectMapping * restDayPutMapping = [RKObjectMapping requestMapping];
    [restDayPutMapping addAttributeMappingsFromDictionary:@{@"dayNumber" : @"restDays.dayNumber"}];

    RKRequestDescriptor * restDayPutDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:[restDayPutMapping inverseMapping] objectClass:[UserProgram class] rootKeyPath:@"rest_days"];
    [经理 addRequestDescriptor:restDayPutDescriptor];

所以两个映射都通过相同的路径模式发送:@“program/restdays”但是对于第一个 GET 请求服务器端返回 json:

    {"rest_days":[{"dayNumber":1},{"dayNumber":4},{"dayNumber":2}]}。

对于第二个 PUT 请求,json:

    {“成功”:“真”}

我必须如何配置我的 restkit 映射?谢谢你。

编辑:升级 restkit 库并发现了很棒的功能,方法被贬低了:

+ (instancetype)responseDescriptorWithMapping:(RKMapping *)mapping
                                  pathPattern:(NSString *)pathPattern
                                      keyPath:(NSString *)keyPath
                                  statusCodes:(NSIndexSet *)statusCodes

并添加了新的:

+ (instancetype)responseDescriptorWithMapping:(RKMapping *)mapping
                                       方法:(RKRequestMethod)方法
                                  pathPattern:(NSString *)pathPattern
                                      keyPath:(NSString *)keyPath
                                  statusCodes:(NSIndexSet *)statusCodes

所以现在我可以为不同的请求方法设置不同的映射。感谢大家的帮助。

4

2 回答 2

2

只要将它们用于不同的目的(如 GET 和 PUT),您就可以为相同的路径模式拥有 2 个不同的映射。RestKit 需要能够判断使用哪一个,只要它可以一切都很好。

但是有两种方法可以进行 PUT:

objectManager putObject:...

这将自动尝试将响应映射到源对象。因此,如果您期望得到状态响应,它就不会很好地工作。或者,您可以使用 RestKit 为您进行序列化:

NSError* error;
NSDictionary *parameters = [RKObjectParameterization parametersWithObject:object requestDescriptor:requestDescriptor error:&error];
NSData *JSON = [RKMIMETypeSerialization dataFromObject:parameters MIMEType:RKMIMETypeJSON error:&error];

然后自己放置结果(使用 RestKit 类或NSURLConenction)。

您最好的选择可能是使用RKObjectRequestOperation,从技术上讲,您不会针对相同的路径模式使用映射,但您可以使用映射来创建请求和处理响应。

于 2013-05-22T10:43:56.390 回答
1

升级了restkit库(08/29/13),发现了很棒的功能,方法被贬低了:

+ (instancetype)responseDescriptorWithMapping:(RKMapping *)mapping
                                  pathPattern:(NSString *)pathPattern
                                      keyPath:(NSString *)keyPath
                                  statusCodes:(NSIndexSet *)statusCodes

并添加了新的:

+ (instancetype)responseDescriptorWithMapping:(RKMapping *)mapping
                                       方法:(RKRequestMethod)方法
                                  pathPattern:(NSString *)pathPattern
                                      keyPath:(NSString *)keyPath
                                  statusCodes:(NSIndexSet *)statusCodes

所以现在我可以为不同的请求方法设置不同的映射。感谢大家的帮助。

于 2013-08-29T09:01:39.537 回答