Я использую 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;
}
Инициализация выполняется с помощью baseURL, взятого из пользовательских значений по умолчанию.
Моя проблема в том, что свойство baseURL доступно только для чтения -. Если пользователь переходит к настройкам и меняет базовый URL-адрес пользователя по умолчанию, как я могу изменить его в своем клиенте?
Еще один похожий случай, который у меня есть с необходимостью изменить базовый URL-адрес, — это API, который требует нескольких вызовов и логики для определения правильного базового URL-адреса. И базовый URL-адрес все еще может меняться во время работы приложения (, например. пользователь изменяет сетевую среду, требуя перехода с локального соединения на соединение 3G через внешний прокси-сервер. ).
Я понимаю, почему свойство baseURL читается только -:, есть такие вещи, как networkReachabilityStatus, которые работают в фоновом режиме и привязаны к этому параметру. При этом кажется довольно простым иметь метод setBaseURL, который останавливает мониторинг, изменяет значение, а затем снова начинает мониторинг...
Я предполагаю, что мой дизайн неверен, должен ли я отказаться -от синглтона в этом случае и заново -создавать клиент каждый раз, когда базовый URL-адрес должен измениться?