2011-06-13 3 views
7

안녕하세요 stackoverflow 커뮤니티, 나는 로컬 개체에 응답을 매핑하는 IOS RESTful 요청을 만들기 위해 RKObjectManager를 사용하고 있습니다.ResKit iOS - 같은 요소에 대해 여러 클래스 등록

Restkit에 대한 나의 문제점은 다른 요청에서 같은 요소에 대해 여러 클래스를 등록하는 것입니다. 이 요청에서 나는 같은 요소 이름 "List"를 가진 중첩 된 객체를 가진다. 여기

코드의 일부입니다 : 다른 요청에서 같은 요소에 대해 여러 클래스를 등록하는 모든 솔루션이 있다면 내가 알고 싶은 무엇

// Get array of RKObjects1 - First request of the queue 
RKObjectManager * objectManager = [RKObjectManager sharedManager]; 
[objectManager registerClass:[RKTObject1 class] forElementNamed:@"List"]; 

RKObjectLoader * loader = [objectManager objectLoaderWithResourcePath:@"objects1" delegate:self]; 
[loader setObjectClass:[RKTList class]]; 



// Get array of RKObjects2 - Second request of the queue 
RKObjectManager * objectManager = [RKObjectManager sharedManager]; 
[objectManager registerClass:[RKObjects2 class] forElementNamed:@"List"]; 

RKObjectLoader * loader = [objectManager objectLoaderWithResourcePath:@"objects2" delegate:self]; 
[loader setObjectClass:[RKTList class]]; 

?

답변

2

내 문제를 해결하기 위해 restkit을 업데이트하고 새로운 Object Mapping 2.0을 사용하여 동일한 요소 키에 대해 여러 클래스를 등록 할 수 있습니다.

각 요청마다 다른 RKObjectMapping 객체를 만들고 RKObjectLoader의 각 객체에 setObjectMapping을 만들어야합니다. 예를 들어

:

이 작업을 수행하는 방법
RKObjectMappingProvider * mappingProvider = [RKObjectManager sharedManager].mappingProvider; 

// Create 2 RKObjectMapping for each request 
RKObjectMapping * object1Mapping = [RKObjectMapping mappingForClass:[RKTList class]]; 
[object1Mapping mapKeyPath:@"Id" toAttribute:@"idObject"]; 
[object1Mapping mapKeyPath:@"Name" toAttribute:@"name"]; 
[mappingProvider setMapping:object1Mapping forKeyPath:@"Objects1List"]; 


RKObjectMapping * object2Mapping = [RKObjectMapping mappingForClass:[RKTList class]]; 
[object2Mapping mapKeyPath:@"Id" toAttribute:@"idObject"]; 
[object2Mapping mapKeyPath:@"Name" toAttribute:@"name"]; 
[mappingProvider setMapping:object2Mapping forKeyPath:@"Objects2List"]; 

//Make the 2 request with explicit object mapping 
RKObjectManager * objectManager = [RKObjectManager sharedManager]; 
RKObjectLoader * loaderFirstRequest = [objectManager objectLoaderWithResourcePath:@"objects1" delegate:self]; 
[loaderFirstRequest setObjectMapping:object1Mapping]; 

RKObjectLoader * loaderSecondRequest = [objectManager objectLoaderWithResourcePath:@"objects2" delegate:self]; 
[loaderSecondRequest setObjectMapping:object2Mapping]; 
+0

? 나는 당신이 각리스트가 'List'keypath를 반환했다고 말했지 만, 두 개의 분리 된 keypaths - Objects1List와 Objects2List를 사용하는 것을 본다. – shawnwall

+0

[objectManager objectLoaderWithResourcePath : delegate :]에는 void 반환 유형이 있습니다. RKObjectLoader는 어떻게 반환합니까? –