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".'
ワードローブには存在しないが、ドレスには存在する「タイプ」キーを尋ねます。どういうわけか、ドレス マッピングでワードローブをマッピングしようとします。その問題について何か考えはありますか?
参考までに、コアデータのターゲットのタイプは変換可能です。