cai*_*man 16 objective-c afnetworking
我正在使用AFNetworking和他们的例子中建议的单例模型.
+ (SGStockRoomHTTPClient *)sharedClient
{
static SGStockRoomHTTPClient *_sharedClient = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
NSString *baseUrlString = [[NSUserDefaults standardUserDefaults] stringForKey:@"server_root_url_preference"];
_sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:baseUrlString]];
});
return _sharedClient;
}
- (id)initWithBaseURL:(NSURL *)url {
self = [super initWithBaseURL:url];
if (!self) {
return nil;
}
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self setDefaultHeader:@"Accept" value:@"text/html"];
return self;
}
Run Code Online (Sandbox Code Playgroud)
使用从用户默认值中获取的baseURL完成初始化.
我的问题是baseURL属性是只读的.如果用户进入设置并更改baseURL用户默认值,我该如何在客户端更改它?
我需要更改baseURL的另一个类似情况是一个API,它需要多个调用和逻辑来确定正确的baseURL.在应用程序运行时,基本URL仍然可以更改(例如,用户更改网络环境,需要通过外部代理服务器从本地连接更改为3G连接).
我明白为什么baseURL属性是只读的:有些像networkReachabilityStatus在后台运行并且与该设置相关联.这就是说,使用setBaseURL方法停止监视,更改值,然后再次开始监视似乎相当容易......
我想我的设计是不对的,在这种情况下我应该放弃单例并在每次baseURL改变时重新创建客户端吗?
Fel*_*lix 23
该类AFHTTPClient
旨在使用单个基本URL.这就是为什么它是readonly.
如果您有多个基本URL,以下是一些解决方案:
在您的AFHTTPClient
子类中重写属性限定符.把它放在@interface里面:@property (readwrite, nonatomic, retain) NSURL *baseURL;
不要使用AFHTTPClient
在所有
创建多个实例 AFHTTPClient
创建HTTP操作时,您可以覆盖baseURL.只需在路径中设置完整的URL而不是相对路径.
归档时间: |
|
查看次数: |
7867 次 |
最近记录: |