0

我从 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>'

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

4

1 回答 1

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;
}];

此外,您不仅限于检查“错误”参数。您可以检查响应中的任何其他键和值,包括存在和值。

于 2013-07-09T13:32:58.683 回答