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?

questionAnswers(2)

yourAnswerToTheQuestion