0

RestKit 0.20 を使用していますが、動的キーを含む JSON を 1 つのオブジェクトにマッピングする際に問題があります。

JSON は次のようになります。

{
    "id": 42,
    "name": "Name of this entity",
    "specialDataMap": {
        "2091:10": {
            "id": 2091,
            "type": "10",
            "value": "1'509.49",
            "name": "Name of special data type 10"
        },
        "2091:02" {
            "id": 2091,
            "type": "02",
            "value": "5.5543",
            "name": "Name of special data type 02"
        }
    }
}

RestKit でそのようなオブジェクトにマップする必要があります。

@interface InfoPoint : NSManagedObject

@property (nonatomic, retrain) NSString* identifier;
@property (nonatomic, retrain) NSString* name;
@property (nonatomic, retrain) NSString* valueOfType10;
@property (nonatomic, retrain) NSString* valueOfType02;

@end

ご覧のとおり、リレーションシップを作成して特別なデータを別のオブジェクトに保存したくありません。意味がありません。他のすべての属性と同様に、ネストされた属性を InfoPoint オブジェクトに割り当てたいと考えています。通常、これはネストされたオブジェクトのキー パスで機能しますが、このパスには動的な部分が含まれています。それを消費する)。

RestKit ドキュメントの動的ネスティング属性の処理について読みました。しかし、これがネストされた属性と一緒に機能するかどうか、またどのように機能するかはわかりませんでした。

----- コメント/質問への回答として追加: ----

Dynamic Object Mappingでも試しました。しかし、RestKit は @"self" 宛先に問題があるように見えるため、機能しませんでした:

RKEntityMapping* type10Mapping = [RKEntityMapping mappingForEntityForName:@"InfoPoint" inManagedObjectStore:objectStore];
[type10Mapping addAttributeMappingsFromDictionary:@{
 @"value": @"valueOfType10"}];

RKDynamicMapping* dynamicMapping = [[RKDynamicMapping alloc] init];
[mapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"specialDataMap" toKeyPath:@"self" withMapping:dynamicMapping]];

[dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) {
    if ([[representation valueForKeyPath:@"type"] isEqualToString:@"10"]) {
        return type10Mapping;
    }
    return nil;
}]; 
4

1 に答える 1