0

私は 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...
4

1 に答える 1

0

私は同様の状況にありましたが、私が見ることができる2つの解決策があります:

1) 緯度と経度のプロパティを持つジオポイントの新しいクラスを作成します。geopoint次に、オブジェクトのクラスにプロパティとして追加します。ディクショナリから 2 つのマッピング (geopoint.lat & geopoint.lon) を削除し、keyPath '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 では、座標を修正してデータをサーバーに PUT できますが、オプション 2 ではできません。

于 2013-02-02T14:38:40.170 に答える