alterando o AFNetworking baseURL

Estou usando o AFNetworking com o modelo singleton sugerido emseu exemplo.

+ (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;
}

A inicialização é feita com um baseURL retirado dos padrões do usuário.

Meu problema é que a propriedade baseURL é somente leitura. Se o usuário acessa as configurações e altera o padrão do usuário baseURL, como posso alterá-lo no meu cliente?

Outro caso semelhante que tenho com a necessidade de alterar o baseURL é uma API que requer várias chamadas e lógica para determinar o rightURL correto. E a URL base ainda pode mudar enquanto o aplicativo está em execução (por exemplo, o usuário altera o ambiente de rede exigindo uma alteração da conexão local para a conexão 3G via servidor proxy externo).

Vejo por que a propriedade baseURL é somente leitura: há coisas como networkReachabilityStatus que são executadas em segundo plano e estão vinculadas a essa configuração. Dito isto, parece bastante fácil ter um método setBaseURL que pára o monitoramento, altera o valor e, em seguida, inicia o monitoramento novamente ...

Eu acho que meu design não está certo, devo desistir do singleton neste caso e recriar o cliente cada vez que o URL base deve mudar?

questionAnswers(2)

yourAnswerToTheQuestion