1

Restkit 0.20 を使用して、オブジェクトをコア データにマッピングおよび保存しています。基本的なマッピングではうまく機能しますが、ネストされた動的マッピングでは機能しません。これは私の応答例です:

[
    {
        "actor": {
            "id": 7,
            "first_name": "Murat",
            "last_name": "Akbal"
        },
        "target": {
            "content_type": "dress",
            "type": {
                "id": 1,
                "name": "leggings",
                "kind": "bottom"
            },
            "style": {
                "id": 1,
                "name": "sport"
            },
            "full_name": "Murat - sport leggings",
            "id": 19,
        }
    }, 
    {
        "actor": {
            "id": 7,
            "first_name": "Murat",
            "last_name": "Akbal"
        },
        "target": {
            "content_type": "wardrobe",
            "style": {
                "id": 1,
                "name": "sport"
            },
            "id": 38,
            "season": "spring",
            "name": "asdasd"
        }
    }
]

次のエンティティ マッピングを使用して、応答をマッピングします。

//create entity mapping
RKEntityMapping *objectMapping = [RKEntityMapping mappingForEntityForName:@"Action"
                                                     inManagedObjectStore:[RKObjectManager sharedManager].managedObjectStore];

//create dynamic mapping
RKDynamicMapping *dynamicMapping = [RKDynamicMapping new];    

//dressMapping and wardrobeMapping predefined mappings, they work well when mapping the wardobe and dress alone.
[dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) {
    if ([[representation valueForKey:@"content_type"] isEqualToString:@"wardrobe"]) {
       return wardrobeMapping;
    } else if ([[representation valueForKey:@"content_type"] isEqualToString:@"dress"]) {
       return dressMapping;
    }
    return nil;
}];


[objectMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"target" toKeyPath:@"target" withMapping:dynamicMapping]];

//maps actor
[objectMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"actor" toKeyPath:@"actor" withMapping:actorMapping]];

最後に、objectMapping を応答記述子として登録します。

RKResponseDescriptor *responseDescriptor =
    [RKResponseDescriptor responseDescriptorWithMapping:objectMapping
                                            pathPattern:nil
                                                keyPath:nil
                                            statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[[RKObjectManager sharedManager] addResponseDescriptor:responseDescriptor];

これは私の応答例では機能せず、次のエラーが発生します。

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Wardrobe 0x110e1a90> valueForUndefinedKey:]: the entity Wardrobe is not key value coding-compliant for the key "type".'

ワードローブには存在しないが、ドレスには存在する「タイプ」キーを尋ねます。どういうわけか、ドレス マッピングでワードローブをマッピングしようとします。その問題について何か考えはありますか?

参考までに、コアデータのターゲットのタイプは変換可能です。

4

1 に答える 1