ResKit iOS - зарегистрируйте несколько классов для одного элемента - PullRequest
7 голосов
/ 13 июня 2011

Привет, сообщество stackoverflow, я использую RKObjectManager для выполнения запросов iOS RESTful для отображения ответов на локальные объекты.

Моя проблема с Restkit - зарегистрировать несколько классов для одного и того же элемента в разных запросах.В этих запросах у меня есть вложенные объекты с тем же именем элемента «Список».

Вот часть кода:

// 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]];

Что я хотел бы знать, если есть какое-либо решениезарегистрировать несколько классов для одного и того же элемента в разных запросах?

1 Ответ

2 голосов
/ 21 июня 2011

Что ж, чтобы решить мою проблему, я обновляю restkit, и с помощью нового Object Mapping 2.0 можно зарегистрировать несколько классов для одних и тех же ключей элементов.

Вам нужно только создавать разные объекты RKObjectMapping для каждого запроса исделать setObjectMapping каждого объекта в RKObjectLoader.

Например:

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];
...