zmiana AFNetworking baseURL
Używam AFNetworking z sugerowanym modelem singletonich przykład.
+ (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;
}
Inicjowanie odbywa się za pomocą baseURL pobranego z ustawień domyślnych użytkownika.
Moim problemem jest to, że właściwość baseURL jest tylko do odczytu. Jeśli użytkownik przejdzie do ustawień i zmieni domyślne ustawienia użytkownika baseURL, jak mogę go zmienić u klienta?
Innym podobnym przypadkiem, który mam potrzebę zmiany baseURL, jest interfejs API, który wymaga wielu wywołań i logiki w celu ustalenia właściwego baseURL. Podstawowy adres URL może się jednak zmienić w trakcie działania aplikacji (np. Użytkownik zmienia środowisko sieciowe wymagające zmiany połączenia lokalnego na połączenie 3G za pośrednictwem zewnętrznego serwera proxy).
Widzę, dlaczego właściwość baseURL jest tylko do odczytu: są rzeczy, takie jak networkReachabilityStatus, które działają w tle i są powiązane z tym ustawieniem. To powiedziawszy, wydaje się dość łatwe mieć metodę setBaseURL, która zatrzymuje monitorowanie, zmienia wartość, a następnie ponownie rozpoczyna monitorowanie ...
Myślę, że mój projekt nie jest w porządku, czy w tym przypadku powinienem oddać singleton i odtworzyć klienta za każdym razem, gdy powinien zmienić się baseURL?