Ios8 更改AFHTTPSessionManager的基本URL

Ios8 更改AFHTTPSessionManager的基本URL,ios8,singleton,afnetworking,afnetworking-2,Ios8,Singleton,Afnetworking,Afnetworking 2,我已经创建了一个子类AFHTTPSessionManager,带有一个单例(下面的代码),但现在我需要根据用户位置调整基本URL(根据用户位置在世界不同地区调用不同的服务器)。看起来这个类的大多数示例都使用了一个不允许您调整基本URL(只读属性)的单例。是否有一种简单的方法可以使用AFHTTPSessionManager调整基本URL + (RebelBaseManager *)sharedRebelBaseHTTPClient; { static RebelBaseManager *_sh

我已经创建了一个子类
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;

}

对于这里感兴趣的人,我创建了一个方法,每当我需要使用
AFHTTPSessionManager

- (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;
}

共享可变状态是个坏主意。由于这个原因,
baseURL
属性是
readonly
。相反,您应该根据需要使用不同的
baseURL
s创建实例,或者甚至可以选择完全退出该功能。@mattt我很害怕:)。。。我感谢你的答复。如果您决定手动合成绝对URL,则有点相关。我觉得这将最终创建新的sessionManager对象。一旦我们更改了url,我们需要为新的基本url rightYes调用initWithBaseURL函数。所以在我调用这个方法之前,我先看看用户在哪里(就位置而言),我调用的是什么基本url,然后如果我需要调用不同的基本url(调用世界不同地区的服务器),我调用这个方法。我存储了应该调用的url,用户默认值可以在上面的方法中看到。