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