RestKit 0.20:restkit 对象映射使属性映射加倍

Posted

技术标签:

【中文标题】RestKit 0.20:restkit 对象映射使属性映射加倍【英文标题】:RestKit 0.20: restkit object mapping doubles mapping of attributes 【发布时间】:2013-01-29 08:42:52 【问题描述】:

我正在使用 RestKit 0.20,并在使用带有点 (.) 的规范符号时检测到一种奇怪的映射行为。如果您能解释一种简单的方法来处理从我在 ios 上作为 NSManagedObject 实现的扁平对象到服务器端的对象关系的对象映射,我会很高兴。

映射几乎是正确的,但从我的角度来看,将 geopoint.lat 和 geopoint.lon 作为额外字段的映射是错误的,并且会在服务器上引发异常(无法识别的属性异常)。

RKObjectMapping:

[mapping addAttributeMappingsFromDictionary:@
 @"geopoint.lat": @"latitude",
 @"geopoint.lon": @"longitude",
 @"countrycode": @"countryId",
 @"county": @"county",
 @"postcode": @"postalcode",
 @"city": @"city",
 @"street": @"street",
 @"housenumber": @"housenumber"
 ];

有效结果(显示为日志输出)

2013-01-29 09:29:38.856 CPlusApp[4285:907] T restkit.object_mapping:RKMappingOperation.m:514 Mapped relationship object from keyPath 'startAddress' to 'startAddress'. Value: 
city = aCity;
geopoint =     
    lat = "48.8901234";
    lon = "8.818448999999998976";
;
"geopoint.lat" = "48.8901234";
"geopoint.lon" = "8.818448999999998976";
postcode = 91000;
street = Rennbrunnen;

2013-01-29 09:29:38.861 CPlusApp[4285:907] D restkit.object_mapping:RKMappingOperation.m:818 Finished mapping operation successfully...

【问题讨论】:

【参考方案1】:

我也遇到过类似的情况,我可以看到两种解决方案:

1) 为具有纬度和经度属性的地理点创建一个新类。然后将geopoint 添加为对象类中的属性。从字典中删除两个映射(geopoint.lat 和 geopoint.lon)并添加从 keyPath 'geopoint' 到 'geopoint' 的关系。从那时起,您可以通过object.geopoint.latobject.geopoint.lon 访问经纬度。

2) 通过以下方式删除请求的映射:

RKEntityMapping *addressRequestMapping = [mapping inverseMapping];

[addressRequestMapping removePropertyMapping:[addressRequestMapping propertyMappingsBySourceKeyPath][@"geopoint.lat"]];
[addressRequestMapping removePropertyMapping:[addressRequestMapping propertyMappingsBySourceKeyPath][@"geopoint.lon"]];

[manager addRequestDescriptorsFromArray:@[

 [RKRequestDescriptor addressRequestMapping objectClass:[Address class] rootKeyPath:nil]

]];

选项 1 将允许您修改坐标并将数据发送到服务器,而选项 2 则不允许。

【讨论】:

谢谢。我也没有看到任何替代方案。同时我采用了我的实现选项1。现在我还有一个类和 sql 表要维护。

以上是关于RestKit 0.20:restkit 对象映射使属性映射加倍的主要内容,如果未能解决你的问题,请参考以下文章

使用 RestKit 0.20 的对象映射关系

RestKit 0.20 嵌套对象映射(对象树的路径不同)

Restkit 0.20 对象在获取 json 响应后未映射

RestKit 0.20 嵌套对象映射问题使用 API

Restkit 0.20 JSON 映射以及额外的离线数据

Restkit 0.20 JSON 映射以及额外的离线数据