2014-05-13 2 views
0

와 객체의 매핑이 나는 객체로 응답 XML을 매핑 할과 같은 XML 보이는 : 내가 원하는 것은 resources 부분Restkit : XML


&ltlist version="1.0"> 
    &ltmeta> 
    &lttype>resource-list</type> 
    </meta> 
    &ltresources start="0" count="168"> 
    &ltresource classname="Quote"> 
     &ltfield name="name">Alpha</field> 
     &ltfield name="price">10</field> 
    </resource> 
    &ltresource classname="Quote"> 
     &ltfield name="name">Beta</field> 
     &ltfield name="price">9</field> 
    </resource> 
    </resources> 
</list> 

.


@interface Field : NSObject 
@property (nonatomic, strong) NSString *name; 
@property (nonatomic, strong) NSNumber *price; 
@end 
@interface Resources : NSObject 
@property (nonatomic, strong) NSNumber *count; 
@property (nonatomic, strong) NSArray *resource; 
@end 

문제는 다음과 같습니다 : 나는 Resourcesresource에 대한 매핑을 설정하는 방법을 모르는 나는 개체 모델을 만들 수 있습니다. 매핑이 완료

RKObjectMapping *objMapping = [RKObjectMapping mappingForClass:[Field class]]; 
[objMapping addAttributeMappingsFromArray:@[@"name",@"price"]];</br> 

RKObjectMapping *resourcesMapping = [RKObjectMapping mappingForClass:[Resources class]]; 
[resourcesMapping addAttributeMappingsFromArray:@[@"count"]]; 
[resourcesMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"resource" toKeyPath:nil withMapping:objMapping]]; 

RKResponseDescriptor *descriptor = [RKResponseDescriptor responseDescriptorWithMapping:resourcesMapping method:RKRequestMethodGET pathPattern:@"XXXXXX" keyPath:@"list.resources" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

후, Resources 개체를 만들 : 나는 한 번 매핑을 사용했습니다. 그러나 그 배열 resource은 여전히 ​​nil입니다.

XML에서 리소스 배열을 가져 오는 방법은 무엇입니까?

RKObjectMapping *objMapping = [RKObjectMapping mappingForClass:[Field class]]; 
objMapping.forceCollectionMapping = YES; 
[objMapping addAttributeMappingsFromDictionary:@{@"name":@"name.text"}]; 

가 나는 또한 키 패스와 respondscripter 업데이트입니다 -----
내가 코드를 업데이트 업데이트
--- : RKObjectManager의 성공 블록에서 다음

RKResponseDescriptor *descriptor = [RKResponseDescriptor responseDescriptorWithMapping:objMapping method:RKRequestMethodGET pathPattern:@"XXXXX" keyPath:@"list.resources.resource.field" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

을, 매핑 결과에는 필드 배열이 있습니다. 문제는 Field의 속성입니다. 모두 nil입니다.


D restkit.object_mapping:RKMapperOperation.m:229 Asked to map source object (
     { 
     name = name; 
     text = "alpha"; 
    }, 
     { 
     name = price; 
     text = "98.3"; 
    } 

) with mapping name.text>" 
)> 
2014-05-14 23:33:57.681 RestKitTest[5138:3307] D restkit.object_mapping:RKMappingOperation.m:859 Starting mapping operation... 
2014-05-14 23:33:57.682 RestKitTest[5138:3307] W restkit.object_mapping:RKMappingOperation.m:338 Destination object rejected attribute value (
    name, 
    price 
) for keyPath name.text. Skipping... 

XML의 속성이지도의 원본 개체의 값이되는 것 같다 :
나는 보이는 로그를 확인하십시오. 어떻게 이런 종류의 객체를 파싱하도록 구성을 설정합니까?

답변

1

Resources 래퍼 개체를 사용할 경우 (응답 할 필요가 없음) 응답 설명자가 들어오는 데이터를 너무 깊게 드릴링하는 경우 키 경로는 단지 list이어야합니다. 추적 로깅을 사용하면 XML이 디코딩 된 방식과 사용중인 키를 확인하는 데 도움이됩니다. 필자는 XML을 자주 사용하지 않고 XML에 대한 키의 매핑을 직접적으로 어렵다고 생각합니다. 는 XML 디코딩은 보통 그래서 오히려 당신이 name.text을 (사용해야합니다 키로 name를 사용하는 것보다, text 키에 발견 된 모든 콘텐츠를 추가하고, 따라서 원본 키 경로를 지정 사전을 필요가 있다고도

주 및 대상 키).

+0

코드를 업데이트하여 RKLog를 추가합니다. 지도 원본 개체를 가져 오지만 매핑을 만들지 못했습니다. 좀 봐 주시겠습니까? – scorpiozj

+0

당신은 나의 지시를 따르지 않았습니다 - 'list.resources.resource.field'의 주요 경로는 어디에서 왔습니까? 또한 XML을 보면 모든 것이'field' 태그이므로 불가능할 수도 있습니다. 즉, 필드 사전 배열을 처리하고 내용을 추출하는 코드를 스스로 작성해야 할 필요가 있음을 의미합니다. RestKit을 사용하지 않는 것이 좋습니다. – Wain

+0

사실'list.resources, resource, field'를 사용할 수없는 이유를 잘 모르겠습니다. 그러나 참조 할 때, 그것은 속성 사전의 배열이고'RestKit'의 매핑없이 구문 분석을 시도합니다. – scorpiozj