更改 AFHTTPSessionManager 的基本 URL
Posted
技术标签:
【中文标题】更改 AFHTTPSessionManager 的基本 URL【英文标题】:Change Base URL of AFHTTPSessionManager 【发布时间】:2014-11-26 05:53:50 【问题描述】:我创建了一个带有单例的AFHTTPSessionManager
的子类(代码如下),但现在我需要根据用户位置调整基本 URL(根据用户调用世界不同地区的不同服务器地点)。似乎此类的大多数示例都使用不允许您调整基本 URL(只读属性)的单例。有没有一种简单的方法可以让我使用 AFHTTPSessionManager
调整基本 URL?
+ (RebelBaseManager *)sharedRebelBaseHTTPClient;
static RebelBaseManager *_sharedRebelBaseHTTPManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
_sharedRebelBaseHTTPManager = [[self alloc] initWithBaseURL:[NSURL URLWithString:baseURL];
_sharedRebelBaseHTTPManager.securityPolicy.allowInvalidCertificates =YES;
);
return _sharedRebelBaseHTTPManager;
【问题讨论】:
共享可变状态是个坏主意。出于这个原因,baseURL
属性为 readonly
。相反,您应该根据需要创建具有不同 baseURL
s 的实例,或者甚至完全退出该功能。
@mattt 我很害怕 :)...感谢您的回复。
My answer 有点相关,如果您决定手动编写绝对 URL。
【参考方案1】:
对于那些感兴趣的人来说,我创建的方法是我在需要使用AFHTTPSessionManager
调整呼叫的基本 URL 时调用的方法
- (AFHTTPSessionManager *) createNewSessionManager
//Load User Defaults
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
//Create url based on user location
AFHTTPSessionManager *newDataCall = nil;
if (![userDefaults valueForKey:@"baseURL"])
[userDefaults setObject:@"https://BASE-URL" forKey:@"baseURL"];
newDataCall = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:[userDefaults valueForKey:@"baseURL"]]];
newDataCall.securityPolicy.allowInvalidCertificates =YES;
newDataCall.responseSerializer = [AFJSONResponseSerializer serializer];
newDataCall.requestSerializer = [AFJSONRequestSerializer serializer];
return newDataCall;
【讨论】:
我觉得这最终会创建新的 sessionManager 对象。一旦我们更改了 url,我们需要为新的基本 url 调用 initWithBaseURL 函数 是的。因此,在调用此方法之前,我会查看用户在哪里(就位置而言)我正在调用什么基本 url,然后如果我需要调用不同的基本 url(调用世界不同地区的服务器)我调用这个方法。我将应该调用的 url 存储在用户默认值中,您可以在上面的方法中看到。以上是关于更改 AFHTTPSessionManager 的基本 URL的主要内容,如果未能解决你的问题,请参考以下文章
使用 AFNetworking 2.0 的 POST 请求 - AFHTTPSessionManager
使用 AFHTTPSessionManager 时的内存泄漏
Swift - 为啥在 AFHTTPSessionManager 中需要 init(coder)?