RestKit:更改 RKObjectManager 的基本 URL
Posted
技术标签:
【中文标题】RestKit:更改 RKObjectManager 的基本 URL【英文标题】:RestKit: change base URL of RKObjectManager 【发布时间】:2012-05-08 14:59:08 【问题描述】:RKObjectManager
创建后是否可以更改基本 URL?
我有登录框,我根据昵称决定应该使用哪个 API 的 URL。如果我在填写昵称/密码后创建 RKObjectManager
,我只能从 RestKit (https://groups.google.com/forum/?fromgroups#!topic/restkit/wFNhpCW-URA) 进行一次调用。如果我创建 RKObjectManager
viewDidLoad
函数 - 我无法更改 URL。
我的问题有相同的解决方案吗?
谢谢。
【问题讨论】:
【参考方案1】:刚刚花了一段时间弄清楚如何在 v0.20 中做到这一点。据我所知,如果不进入 AFNetworking 源代码,您将无法直接更改基本 URL。您可以创建一个新的HTTPClient
并设置它,但我发现这会导致更多问题,大概是因为RestKit 在设置RKObjectManager
时对AFNetworking 的HTTPClient
进行了一些额外的配置,而通过直接设置客户端,您就错过了这一点。
我想出了这个解决方案,即使用新的 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
【讨论】:
认真的吗?您必须重新添加所有描述符才能更改 baseUrl 吗?编辑:好的,阅读文档后我明白了原因,这是因为您不想在请求仍在运行时更改基本 URL,等等。所以我想只需实现上面的代码并继续它..【参考方案2】:这是在初始化后更改RestKit baseURL
的方法:
[RKObjectManager sharedManager].client.baseURL = [RKURL URLWithString:newBaseUrlString];
来自 RestKit 文档的通知:
更改 baseURL 的副作用是导致 requestCache 要重建的实例。缓存是按主机维护的。
我用过,效果很好:)
【讨论】:
这在 RestKit v0.20 中适用于我:[[RKObjectManager sharedManager] setHTTPClient:[AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"https://api.somewhere.com"]]];
【参考方案3】:
小心!
我对 RestKit 2.0 使用了公认的答案,但不幸的是,这导致了 restkit 中难以调试的崩溃。起作用的只是将所有描述符创建和其他对象管理器设置封装到一个方法中,并在调用 [RKObjectManager setSharedManager:newManager] 之前使用新的对象管理器对象调用它;
【讨论】:
是的,唯一的方法是重建您的 RKObjectManager 和所有相关设置。【参考方案4】:我认为没有解决方案。 RestKit 内部使用基本 URL,不能更改。
【讨论】:
以上是关于RestKit:更改 RKObjectManager 的基本 URL的主要内容,如果未能解决你的问题,请参考以下文章
我可以防止 RestKit+CoreData 覆盖本地实体更改吗?
Restkit如何将任意json(键可能会超时更改)映射到NSDictionary