RestKit:如何使用不同的映射处理失败结果

时间:2012-08-04 07:39:55

标签: restkit

我从服务器获取用户对象。如果请求成功,我会得到:

{ user = {
        User = { id = 1; }
} }

失败后我得到:

{ user = false; }

我有一个适用于成功案例的映射:[mappingProvider setMapping:userMapping forKeyPath:@"user.User"];

但是在失败的情况下,我收到以下异常:'NSUnknownKeyException', reason: '[<__NSCFBoolean 0x1c58f78> valueForUndefinedKey:]: this class is not key value coding-compliant for the key User.'我还尝试将userMapping设置为映射上的密钥路径User的关系,以生成NSDictionaryuser密钥路径开始,也没有任何欢乐。

处理此问题的正确方法是什么?看起来我需要两个不同的user密钥路径映射,并根据是否要将对象解码为NSBoolean来选择哪一个...

2 个答案:

答案 0 :(得分:0)

我建议RKDynamicObjectMapping。这两种口味中的任何一种都适合你:

- (void)setObjectMapping:(RKObjectMapping *)objectMapping whenValueOfKeyPath:(NSString *)keyPath isEqualTo:(id)value;

+ (RKDynamicObjectMapping *)dynamicMappingUsingBlock:(void(^)(RKDynamicObjectMapping *dynamicMapping))block;

答案 1 :(得分:0)

服务器可能(并且希望)返回一个http错误代码,例如400等。所以可能Restkit正在尝试使用错误映射来映射响应。

也许您需要做的是动态对象映射,如@Paul所说..但应用于错误映射。我在这里给你一个简单的错误映射,让你知道我在说什么:

RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];
[errorMapping mapKeyPath:@"msg" toAttribute:@"errorMessage"];
[[[RKObjectManager sharedManager] mappingProvider] setErrorMapping:errorMapping];