Ändern der AFNetworking-Basis-URL

Ich verwende AFNetworking mit dem in vorgeschlagenen Singleton-Modellihr Beispiel.

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

Die Initialisierung erfolgt mit einer baseURL, die den Benutzerstandards entnommen ist.

Mein Problem ist, dass die baseURL-Eigenschaft schreibgeschützt ist. Wie kann ich in meinem Client ändern, wenn der Benutzer zu den Einstellungen wechselt und die Standardeinstellungen des baseURL-Benutzers ändert?

Ein weiterer ähnlicher Fall, in dem die baseURL geändert werden muss, ist eine API, für die mehrere Aufrufe und eine Logik erforderlich sind, um die richtige baseURL zu ermitteln. Die Basis-URL kann sich weiterhin ändern, während die App ausgeführt wird (z. B. der Benutzer ändert die Netzwerkumgebung, für die eine Änderung von der lokalen Verbindung zur 3G-Verbindung über einen externen Proxyserver erforderlich ist.).

Ich sehe, warum die baseURL-Eigenschaft schreibgeschützt ist: Es gibt Dinge wie networkReachabilityStatus, die im Hintergrund ausgeführt werden und an diese Einstellung gebunden sind. Das heißt, es scheint ziemlich einfach zu sein, eine setBaseURL-Methode zu haben, die die Überwachung stoppt, den Wert ändert und dann wieder mit der Überwachung beginnt ...

Ich vermute, mein Design stimmt nicht. Sollte ich in diesem Fall den Singleton aufgeben und den Client jedes Mal neu erstellen, wenn sich die baseURL ändert?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage