Я тестирую 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.
Заранее благодарю.