изменение базового URL-адреса AFNetworking

Я использую 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-адрес должен измениться?

16
задан caiman 25 July 2012 в 11:50
поделиться