Restkit动态映射的可选属性

时间:2013-07-09 12:18:37

标签: ios objective-c restkit restkit-0.20

我从ws获取这样的json文档:

{
   ...
   error=true,
   errorMsg="xyz",
   errorCode="1234"
}

但这些属性是可选的,因此有时它们存在,有时它们不存在。

我添加了一个动态映射,仅用于读取错误 - 仅当错误设置为true

或者:

[dynamicMapping addMatcher:[RKObjectMappingMatcher matcherWithKeyPath:@"error" expectedValue:[NSNumber numberWithInt:1] objectMapping:errorMapping]];

[dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) {
        if ([[representation valueForKey:@"error"] isEqualToNumber:[NSNumber numberWithInt:1]]) {
            return errorMapping;
        } 

        return nil;
    }];

如果error = true,一切正常,但如果缺少错误属性,我会收到警告:

restkit.object_mapping:RKMapperOperation.m:98 Adding mapping error: Could not find an object mapping for keyPath: '<null>'

我只是想摆脱警告。这个问题的最佳做法是什么?如何将属性标记为可选?

1 个答案:

答案 0 :(得分:0)

要删除警告,您需要完成映射配置,因为目前您只提供了一半场景的信息。警告只是一个警告。它可能是有意的功能,这就是它不是断言的原因。

因此,您正在处理错误情况,只需添加另一个检查,例如:

[dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) {
    NSNumber *errorNumber = [representation valueForKey:@"error"];

    if (errorNumber == nil) {
        return successMapping;
    } else if ([errorNumber isEqualToNumber:[NSNumber numberWithInt:1]]) {
        return errorMapping;
    } 

    return warningMapping;
}];

此外,您不仅可以检查'error'参数。您可以检查响应中的任何其他键和值,包括存在值和值。