Używam AFNetworking z modelem singleton sugerowanym w their example.Zmiana bazy AFNetworkingURL
+ (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ę z baseURL pobranym z domyślnych ustawień użytkownika.
Mój problem polega na tym, że właściwość baseURL jest tylko do odczytu. Jeśli użytkownik przejdzie do ustawień i zmieni domyślnego użytkownika bazy danych, jak mogę go zmienić w moim kliencie?
Innym podobnym przypadkiem, jaki mam z potrzebą zmiany baseURL, jest interfejs API, który wymaga wielu wywołań i logiki w celu ustalenia właściwego podstawowego adresu e-mail. A adres URL bazy wciąż może się zmieniać, gdy aplikacja jest uruchomiona (np. Użytkownik zmienia środowisko sieciowe, które wymaga zmiany z połączenia lokalnego na połączenie 3G za pośrednictwem zewnętrznego serwera proxy).
Widzę, dlaczego właściwość baseURL jest tylko do odczytu: istnieją 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 rozpoczyna monitorowanie ponownie ...
Myślę, że mój projekt jest nie w porządku, powinienem zrezygnować z singleton w tym przypadku i ponownie utworzyć klienta za każdym razem, gdy zmienią się baseURL?
Aby wyjaśnić, pytanie jest dość specyficzne AFNetworking: w jaki sposób należy stosować AFHTTPClient z API, które nie mają stałego podstawowego adresu URL, ale coś użytkownik (lub program sterujący) należy podać? Przykład z domyślnymi ustawieniami użytkownika jest dobry, powyższy kod działa, ale użytkownik musi zamknąć i ponownie uruchomić aplikację, aby aktywować zmiany. – caiman
Dobre pytanie! Mam podobny problem. Powinienem przełączyć serwer na serwer pomocniczy, gdy serwer główny jest wyłączony. I przełącz się z powrotem, gdy główny, kiedy to działa i działa ponownie. –