我正在测试 RestKit,需要访问不同的 BaseUrl,有时还需要“一次”从不同的地方访问具有相同 baseUrl 的 Web 服务,最后我还需要在同一个控制器中访问具有不同 ressourcePaths 的相同 baseUrl。
在我的应用程序委托中,我像这样设置了 RKObjectManager 单例。
RKObjectManager *objectManager = [RKObjectManager objectManagerWithBaseURL:kBaseUrl];
[objectManager registerClass:[EntityClass1 class] forElementNamed:@"element1"];
[objectManager registerClass:[EntityClass2 class] forElementNamed:@"element2"];
.
.
.
etc.
单例方法很容易使用,但是我不知道如何分离不同的 Web 服务调用。
在实现 RKObjectLoaderDelegate 的 MyViewController 中,我将有两个方法:
- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects {
//stuff with result
}
- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error {
//stuff with error
}
当 MyViewController 使用一个 RKObjectManager 单例通过一个 baseUrl 访问一个 ressourcePath 时,这不会导致任何问题。
如果我以这种方式启动不同的请求:
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:FLICKRPath delegate:self]
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:FOURSQUAREPath delegate:self]
等等,在同一个MyController中,我的问题是FLICKRPath和FOURSQUAREPath当然有不同的baseUrl,但RKObjectManager只有一个?
如果我得到这个工作并且可以有不同的 RKObjectManagers 另一个问题就会出现。委托方法 didLoadObjects 和 didFailWithError 将从两个 RKObjectManagers 接收结果,除了它们的 baseUrls 之外,我看不到任何其他方法来区分它们。在委托方法中将每个返回值与 baseUrl 甚至更糟糕的 ressourcePath 进行比较对我来说根本没有吸引力。
如果我有不同的 RKObjectManagers,我想我可以向它们传递不同的委托并构建专门用于处理来自不同 baseUrls 和 ressourcePaths 的返回值的类。这意味着我必须在 MyController 和 RestKit 之上构建另一个抽象,这看起来也很混乱。
我有一种强烈的感觉,我正在以错误的方式解决这个问题,RestKit 源代码非常令人印象深刻,这表明我正在与框架作斗争。我非常感谢有关该主题的一些最佳实践见解。我已经浏览了所有可以找到但没有看到上述用例的资源和示例。它始终是一个 RKObjectManager、一个 baseUrl 和一个 ressourcePath。
先感谢您。