2012-05-21 44 views
5

可以通過mapKeyPath點語法強制RestKit對象映射器映射到數組中的特定嵌套對象?RestKit嵌套映射到特定數組項目

這裏是我試圖映射

<result is_array="true"> 
    <item> 
    <_field_data> 
     <nid> 
      <entity> 
       <field_region> 
       <und is_array="true"> 
        <item> 
         <value>1</value> 
        </item> 
       </und> 
       </field_region> 
.... 

我只是在將永遠爲field_region返回的第一個項目感興趣的響應。

這是什麼映射的正確方式?

我已經試過的各種迭代:

RKManagedObjectMapping *record = [RKManagedObjectMapping mappingForClass:[MyRecordClass class] inManagedObjectStore:objManager.objectStore]; 
[record mapKeyPath:@"_field_data.nid.entity.field_region.und.0.item.value" toAttribute:@"region"]; 

和我不斷收到錯誤類似於:

T restkit.object_mapping:RKObjectMappingOperation.m:152 Found transformable value at keyPath '_field_data.nid.entity.field_region.und.0.item.value'. Transforming from type '__NSArrayI' to 'NSNumber' 
W restkit.object_mapping:RKObjectMappingOperation.m:232 Failed transformation of value at keyPath '_field_data.nid.entity.field_region.und.0.item.value'. No strategy for transforming from '__NSArrayI' to 'NSNumber' 

我通過調用映射:

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:kMyResourcePath usingBlock:^(RKObjectLoader* loader) { 
    loader.objectMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[MyRecordClass class]]; 
    loader.method = RKRequestMethodGET; 
    loader.delegate = self; 
    loader.targetObject = nil; 
}]; 

任何想法?非常感謝!

回答

0

認爲您必須爲每個級別都進行映射,因此實體對象映射包含一個字段區域對象。字段區域對象映射包含一個und對象。 und對象映射包含項目等...

我只做過嵌套json rest kit的響應,而不是xml,但必須爲每個級別創建映射。

這樣的事情(授予此是不完整的,因爲你需要爲每個級別的關係)

RKObjectMapping* undMapping = [RKObjectMapping mappingForClass:[UND class]]; 
[und mapKeyPath:@"item" toAttribute:@"item"]; 

RKObjectMapping* regionmapping = [RKObjectMapping mappingForClass:[Region class]]; 
[regionmapping mapKeyPath:@"und" toRelationship:@"undArrays" withMapping:undMapping]; 
+0

感謝。我在映射中研究了這種映射,但認爲它更智能(更簡單)來簡化服務器響應。 – Ted