【问题标题】:Change Base URL of AFHTTPSessionManager更改 AFHTTPSessionManager 的基本 URL
【发布时间】: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。相反,您应该根据需要创建具有不同 baseURLs 的实例,或者甚至完全退出该功能。
  • @mattt 我很害怕 :)...感谢您的回复。
  • My answer 有点相关,如果您决定手动编写绝对 URL。

标签: ios8 singleton afnetworking afnetworking-2


【解决方案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 存储在用户默认值中,您可以在上面的方法中看到。
猜你喜欢
  • 2014-02-23
  • 2015-12-07
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 2016-10-11
  • 2018-05-04
相关资源
最近更新 更多