我从服务器获取用户对象。如果请求成功,我会得到:
{ 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
的关系,以生成NSDictionary
从user
密钥路径开始,也没有任何欢乐。
处理此问题的正确方法是什么?看起来我需要两个不同的user
密钥路径映射,并根据是否要将对象解码为NSBoolean来选择哪一个...
答案 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];