Ios 可选属性的Restkit动态映射
我从ws:Ios 可选属性的Restkit动态映射,ios,objective-c,restkit,restkit-0.20,Ios,Objective C,Restkit,Restkit 0.20,我从ws: { ... error=true, errorMsg="xyz", errorCode="1234" } 但是这些属性是可选的,所以有时它们存在,有时不存在 我为只读错误添加了一个动态映射-仅当error设置为true时 要么: [dynamicMapping addMatcher:[RKObjectMappingMatcher matcherWithKeyPath:@"error" expectedValue:[NSNumber numberWithInt
{
...
error=true,
errorMsg="xyz",
errorCode="1234"
}
但是这些属性是可选的,所以有时它们存在,有时不存在
我为只读错误添加了一个动态映射-仅当error设置为true时
要么:
[dynamicMapping addMatcher:[RKObjectMappingMatcher matcherWithKeyPath:@"error" expectedValue:[NSNumber numberWithInt:1] objectMapping:errorMapping]];
或
如果error=true,一切正常,但如果error属性丢失,我会收到一条警告:
restkit.object_mapping:RKMapperOperation.m:98 Adding mapping error: Could not find an object mapping for keyPath: '<null>'
restkit.object\u映射:RKMapperOperation.m:98添加映射错误:找不到keyPath的对象映射:“”
我只是想摆脱这个警告。解决此问题的最佳做法是什么?如何将该属性标记为可选?要删除该警告,您需要完成映射配置,因为目前您只提供了一半场景的信息。警告就是警告。它可能是预期的功能,这就是为什么它不是断言 因此,在处理错误情况时,只需添加另一个检查,如:
[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'参数。您可以检查响应中的任何其他键和值是否存在以及是否有值。是否使用此映射和另一个映射?您好,是的,对于状态代码为RKStatusCodeClassServerError=500的服务器错误,我使用相同的映射(“errorMapping”)。因此,如果服务器上发生错误,服务器将以json格式发送错误消息。我的意思是,您的成功场景是如何处理的?通常,动态映射会检查状态,然后返回错误映射或成功映射。如果error=false或未指定错误属性,则返回成功。带有消息的Error=false将是一个警告,我可能还会为此添加一个对象并添加另一个动态映射。问题是,我为密钥路径“people”注册了一个成功映射,因此我的成功json可能如下所示:{people:[…],Error=false,…}因此,为密钥路径nil注册了错误动态映射
[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;
}];