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

Objective c RestKit 0.20:RestKit对象映射使属性映射加倍,objective-c,json,restkit,Objective C,Json,Restkit,我正在使用RESTKit0.20,在使用带点(.)的规范符号时检测到一种奇怪的映射行为。如果您能解释一种处理对象映射的简单方法,从我在IOS上作为NSManagedObject实现的扁平对象到服务器端的对象关系,我将非常高兴 映射几乎正确,但从我的角度来看,geopoint.lat和geopoint.lon作为额外字段的映射是错误的,并在服务器上引发异常(无法识别的属性异常) 对象映射: [mapping addAttributeMappingsFromDictionary:@{ @"geop

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

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

对象映射:

[mapping addAttributeMappingsFromDictionary:@{
 @"geopoint.lat": @"latitude",
 @"geopoint.lon": @"longitude",
 @"countrycode": @"countryId",
 @"county": @"county",
 @"postcode": @"postalcode",
 @"city": @"city",
 @"street": @"street",
 @"housenumber": @"housenumber"
 }];
有效结果(显示为日志输出)


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

1) 为具有lat和lon特性的地质点创建新类。然后将
地质点
作为属性添加到对象的类中。从字典中删除两个映射(geopoint.lat和geopoint.lon),并添加从关键路径“geopoint”到“geopoint”的关系。从那时起,您可以通过
object.geopoint.lat
object.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表要维护。
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]

]];