Я тестирую RestKit и нуждаюсь в доступе к различным BaseUrls, а также иногда получаю доступ к веб-сервису с одним и тем же базовым узлом из разных мест "сразу", и, наконец, мне также нужно получить доступ к тому же baseUrl с разными параметрами ressourcePath в одном контроллере.
В моем делете приложения я установил singleton RKObjectManager, как это.
RKObjectManager *objectManager = [RKObjectManager objectManagerWithBaseURL:kBaseUrl];
[objectManager registerClass:[EntityClass1 class] forElementNamed:@"element1"];
[objectManager registerClass:[EntityClass2 class] forElementNamed:@"element2"];
.
.
.
etc.
Одиночный подход очень прост в работе, но я не могу понять, как отделить различные вызовы веб-сервисов.
В MyViewController, который реализует RKObjectLoaderDelegate, у меня будут два метода:
- (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 получат результаты от RKObjectManagers, и я не вижу другого способа рассказать их обособленно, чем от их baseUrls. Потенциально сравнивая каждое возвращаемое значение с baseUrl и, что еще хуже, ressourcePath, в методе делегата вообще не обращается ко мне.
Если у меня есть разные RKObjectManagers, я думаю, я мог бы передавать им разные делегаты и создавать классы, предназначенные для обработки возвращаемых значений из разных baseUrls и ressourcePaths. Это означало бы, что мне пришлось создать еще одну абстракцию поверх MyController и RestKit, которая также кажется беспорядочной.
У меня есть сильное чувство, что я делаю это неправильно, источник RestKit очень впечатляет, что указывает на то, что я борюсь с каркасом. Я был бы очень признателен за понимание лучшей практики на эту тему. Я прошел через все ресурсы и примеры, которые мог найти, но не видел вышеупомянутого варианта использования. Это всегда один RKObjectManager, один baseUrl и один ressourcePath.
Спасибо заранее.