RestKit:更改RKObjectManager的基本URL

时间:2012-05-08 14:59:09

标签: iphone ios ipad restkit

创建后是否可以更改RKObjectManager的基本网址?

我有登录框,从昵称我决定API应该使用哪个URL。如果我在填写昵称/密码后创建RKObjectManager,我只能通过RestKit(https://groups.google.com/forum/?fromgroups#!topic/restkit/wFNhpCW-URA)进行单次调用。如果我创建RKObjectManager viewDidLoad函数 - 我无法更改网址。

我的问题有同样的解决方案吗?

感谢。

4 个答案:

答案 0 :(得分:12)

花了一些时间来弄清楚如何在v0.20中完成这项工作。据我所知,您无法直接更改基本URL而无需进入AFNetworking源代码。您可以创建一个新的HTTPClient并进行设置,但我发现这会导致更多问题,可能是因为RestKit在AFNetworking的HTTPClient上进行了一些额外的配置RKObjectManager,通过直接设置客户端,您就错过了。

我提出了这个解决方案,即使用新的baseURL创建另一个RKObjectManager并重新添加描述符。您还需要再次设置序列化和标题类型。

NSString *urlString = @"http://www.something.com/api";
RKObjectManager *newManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:urlString]];
[newManager setRequestSerializationMIMEType:RKMIMETypeJSON];
[newManager setAcceptHeaderWithMIMEType:RKMIMETypeJSON];
[newManager addResponseDescriptorsFromArray:[RKObjectManager sharedManager].responseDescriptors];
[newManager addRequestDescriptorsFromArray:[RKObjectManager sharedManager].requestDescriptors];
[RKObjectManager setSharedManager:newManager];

相关文档:Using Multiple Base URLs in RestKit

答案 1 :(得分:6)

以下是在init之后更改RestKit baseURL的方法:

[RKObjectManager sharedManager].client.baseURL = [RKURL URLWithString:newBaseUrlString];

来自RestKit doc的通知:

  

更改baseURL会产生导致requestCache的副作用   要重建的实例。高速缓存按主机维护。

我使用它并且工作正常:)

答案 2 :(得分:2)

小心!

我使用了RestKit 2.0的接受答案但不幸的是,这导致了restkit中难以调试的崩溃。什么工作只是将所有描述符创建和其他对象管理器设置封装到一个方法中,并在调用[RKObjectManager setSharedManager:newManager]之前使用新的对象管理器对象调用它;

答案 3 :(得分:1)

我认为没有解决方案。 RestKit在内部使用基本URL,无法更改。