我从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>'
我只是想摆脱警告。这个问题的最佳做法是什么?如何将属性标记为可选?
答案 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'参数。您可以检查响应中的任何其他键和值,包括存在值和值。