6 Stimmen

RestKit: Basis-URL von RKObjectManager ändern

Ist es möglich, die Basis-URL von RKObjectManager nach der Schöpfung?

Ich habe eine Login-Box und entscheide anhand des Nicknames, welche URL für API ich verwenden soll. Wenn ich erstelle RKObjectManager nach dem Ausfüllen von Nick/Passwort kann ich nur einen einzigen Aufruf von RestKit machen ( https://groups.google.com/forum/?fromgroups#!topic/restkit/wFNhpCW-URA ). Wenn ich eine RKObjectManager viewDidLoad Funktion - ich kann die URL nicht ändern.

Gibt es eine Lösung für mein Problem?

Merci.

12voto

Kyle Clegg Punkte 37388

Ich habe gerade eine Weile damit verbracht, herauszufinden, wie das in v0.20 gemacht werden kann. Soweit ich das beurteilen kann, kann man die Basis-URL nicht direkt ändern, ohne in den AFNetworking-Quellcode einzugreifen. Sie puede eine neue HTTPClient und setzen, aber ich fand heraus, dass dies noch mehr Probleme verursachte, vermutlich weil RestKit eine zusätzliche Konfiguration auf AFNetworking's HTTPClient wenn Sie die RKObjectManager und wenn Sie den Kunden direkt einstellen, entgeht Ihnen das.

Ich habe diese Lösung gefunden, die darin besteht, eine weitere RKObjectManager mit der neuen baseURL und fügen Sie die Deskriptoren erneut hinzu. Außerdem müssen Sie Ihre Serialisierungs- und Header-Typen erneut festlegen.

NSString *urlString = @"http://www.something.com/api";
RKObjectManager *newManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:urlString]];
[newManager setRequestSerializationMIMEType:RKMIMETypeJSON];
[newManager setAcceptHeaderWithMIMEType:RKMIMETypeJSON];
[newManager addResponseDescriptorsFromArray:[RKObjectManager sharedManager].responseDescriptors];
[newManager addRequestDescriptorsFromArray:[RKObjectManager sharedManager].requestDescriptors];
[RKObjectManager setSharedManager:newManager];

Zugehörige Dokumentation: Verwendung mehrerer Basis-URLs in RestKit

6voto

Antoine Beloeuvre Punkte 526

Hier ist der Weg, um das RestKit zu ändern baseURL nach init:

[RKObjectManager sharedManager].client.baseURL = [RKURL URLWithString:newBaseUrlString];

Hinweis aus dem RestKit-Dokument:

Das Ändern der baseURL hat den Nebeneffekt, dass es zu Instanz neu erstellt wird. Die Caches werden pro Host verwaltet.

Ich benutze es und es funktioniert gut :)

2voto

deepwinter Punkte 4318

Seien Sie vorsichtig!

Ich habe die akzeptierte Antwort für RestKit 2.0 verwendet, ABER leider führte dies zu einem schwer zu debuggenden Absturz innerhalb von Restkit. Was funktionierte, war einfach alle Deskriptor-Erstellung und andere Objektmanager-Einstellungen in eine Methode zu kapseln und diese mit dem neuen Objektmanager-Objekt vor dem Aufruf von [RKObjectManager setSharedManager:newManager] aufzurufen;

1voto

kraag22 Punkte 2969

Ich glaube nicht, dass es eine Lösung für dieses Problem gibt. RestKit verwendet intern die Basis-URL und diese kann nicht geändert werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X