RestKit对象映射在BOOL的null JSON值上崩溃

时间:2012-11-13 20:29:23

标签: ios restkit

我有一些JSON从一个服务返回,有时候对于一个布尔属性,它将为null而不是true / false;像这样:

"hide_locations" : null,

我收到此值的对象有一个属性:

@property (nonatomic, assign) BOOL hideLocations;

我的映射配置如下:

RKObjectMapping *retVal = [RKObjectMapping mappingForClass:[self class]];
[retVal mapKeyPath:@"hide_locations" toAttribute:@"hideLocations"];

但是当我执行映射时,RestKit 0.10.3在此行崩溃:

[self.destinationObject setValue:value forKeyPath:attributeMapping.destinationKeyPath];

在      - (void)applyAttributeMapping:(RKObjectAttributeMapping *)attributeMapping withValue:(id)value

在RKObjectMappingOperation.m中

,出现以下错误:

2012-11-13 09:33:04.352测试[73816:5f03] * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'[setNilValueForKey]:无法将nil设置为关键hideLocations的值。'

对我来说,像这样的成熟框架不能更优雅地处理这种情况似乎很奇怪,所以我不禁想到我已经错误地配置了一些东西。我很感激您的任何见解。

2 个答案:

答案 0 :(得分:1)

null在JSON中不是有效的布尔值,只有true和false,所以我认为在objective-c中对象映射是错误的,使它成为BOOL。您应该修正json以正确表示布尔值(然后您将不会有任何空值崩溃)或将hide_locations / hideLocations视为NSString,并在需要时在代码中使用[hideLocations boolValue]

答案 1 :(得分:0)

遗憾的是,似乎RestKit并没有很好地容忍这种输入。

迄今为止我收到的最有效的建议是防止这个问题来自RestKit的Blake Watters,他说:

  

您应该只在目标上实施setNilValueForKey:   反对并妥善处理它。

所以,你有它,要么预先消毒你的JSON,要么武装对setNilValueForKey:的呼叫

参考:https://groups.google.com/forum/?fromgroups=#!topic/restkit/dlYVd0zCr3c