Одновременно более одного RKObjectManager (RestKit)

Я тестирую RestKit, и мне нужно получить доступ к разным BaseUrls, а также иногда обращаться к веб-сервису с одним и тем же baseUrl из разных мест «сразу», наконец, мне также нужно получить доступ к тому же baseUrl с разными ressourcePaths в том же контроллере.

В своем делегате приложения я настроил синглтон RKObjectManager следующим образом.

RKObjectManager *objectManager = [RKObjectManager objectManagerWithBaseURL:kBaseUrl];
[objectManager registerClass:[EntityClass1 class] forElementNamed:@"element1"];
[objectManager registerClass:[EntityClass2 class] forElementNamed:@"element2"];
.
.
.
etc.

С одиночным подходом действительно легко работать, однако я не могу понять, как разделить различные вызовы веб-сервисов.

В MyViewController, реализующем РК ObjectLoaderDelegate, у меня будет два метода:

- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects         {
    //stuff with result
}

- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error {
    //stuff with error    
}

Это не вызывает проблем, когда MyViewController использует один синглтон RKObjectManager для доступа к одному ressourcePath с одним baseUrl.

Если я запускаю разные запросы таким образом:

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:FLICKRPath delegate:self]
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:FOURSQUAREPath delegate:self]

и так далее, внутри тот же MyController, моя проблема в том, что FLICKRPath и FOURSQUAREPath, конечно, имеют разные baseUrl, но у RKObjectManager только один?

Если я получу это, и у меня могут быть разные RKObjectManager, возникнет другая проблема. Методы делегата didLoadObjects и didFailWithError будут получать результаты от обоих RKObjectManager, и я не вижу другого способа отличить их, кроме их baseUrls. Потенциальное сравнение каждого возвращаемого значения с baseUrl и, что еще хуже, с ressourcePath, в методе делегата меня совершенно не привлекает.

Если у меня разные RKObjectManager, я думаю, я мог бы передать им разных делегатов и построить классы, предназначенные для работы с возвращаемыми значениями из разных baseUrls и ressourcePaths. Это означало бы, что мне пришлось создать еще одну абстракцию поверх MyController и RestKit, что также кажется беспорядочным.

У меня есть сильное чувство, что я делаю это неправильно, исходный код RestKit очень впечатляет, что указывает на то, что я борюсь с фреймворком. Я был бы очень признателен за некоторые полезные советы по этому вопросу. Я просмотрел все ресурсы и примеры, которые мог найти, но не видел вышеуказанного варианта использования. Это всегда один RKObjectManager,один baseUrl и один ressourcePath.

Заранее благодарю.

13
задан RickiG 1 June 2011 в 09:01
поделиться