0

我有一些从服务返回的 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 的值。”

对我来说,像这样成熟的框架并不能更优雅地处理这种情况似乎很奇怪,所以我不禁认为我配置了一些不正确的东西。我将不胜感激您可能拥有的任何见解。

4

2 回答 2

1

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

于 2012-11-13T21:00:44.450 回答
0

不幸的是,RestKit 似乎不能很好地容忍这种输入。

到目前为止,我收到的针对此问题的最佳可用建议来自 RestKit 的 Blake Watters,他说:

您可能应该只setNilValueForKey:在目标对象上实现并适当地处理它。

所以,你有它,或者预先清理你的 JSON,或者反对调用setNilValueForKey:

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

于 2012-11-14T22:15:56.753 回答