2012-05-08 22 views
6

Czy po utworzeniu można zmienić bazowy adres URL RKObjectManager?RestKit: zmiana podstawowego adresu URL RKObjectManager

Mam pole logowania i od pseudonimu Decyduję, który URL dla interfejsu API powinienem użyć. Jeśli utworzę RKObjectManager po wypełnieniu nicka/hasła, mogę wykonać tylko jedno połączenie z pakietu RestKit (https://groups.google.com/forum/?fromgroups#!topic/restkit/wFNhpCW-URA). Jeśli utworzę funkcję RKObjectManagerviewDidLoad - nie mogę zmienić adresu URL.

Czy jest to samo rozwiązanie mojego problemu?

Dzięki.

Odpowiedz

12

Właśnie spędziłem trochę czasu na zastanawianie się, w jaki sposób można to zrobić w v0.20. Z tego, co wiem, nie można bezpośrednio zmienić podstawowego adresu URL bez dostania się do kodu źródłowego AFNetworking. Możesz utworzyć utworzyć nowy HTTPClient i ustawić go, ale znalazłem, że spowodowało to jeszcze więcej problemów, prawdopodobnie dlatego, że RestKit wykonuje dodatkową konfigurację na HTTPClient AFNetworking podczas konfigurowania RKObjectManager, a ustawiając klienta bezpośrednio tracisz na że.

Wpadłem na to rozwiązanie, które polega na stworzeniu kolejnego RKObjectManager z nowym baseURL i ponownym dodaniem deskryptorów. Będziesz także musiał ponownie ustawić serializację i typy nagłówków.

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]; 

Powiązane dokumentacja: Using Multiple Base URLs in RestKit

+0

poważnie? musisz ponownie dodać wszystkie deskryptory, aby zmienić bazę? EDIT: Ok po przeczytaniu dokumentacji widzę dlaczego, ponieważ nie chcesz zmieniać podstawowego adresu URL, gdy żądania są nadal uruchomione, itd. Więc domyślam się, po prostu zaimplementuj powyższy kod i przejdź z nim .. – deepwinter

1

Nie sądzę, że istnieje na to rozwiązanie. RestKit używa wewnętrznie bazowego adresu URL i nie można go zmienić.

5

to sposób, w celu zmiany RestKit baseURL po inicjalizujący

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

Zawiadomienie RestKit DOC

Zmiana baseurl ma niepożądany efekt, powodując wystąpienie requestCache się przebudowany. Skrytki są utrzymywane na bazie hosta.

Używam go i działa dobrze :)

+0

Jak to zrobić w RestKit v0.20? –

+0

To działa dla mnie w RestKit v0.20: '[[ROMbjectManager sharedManager] setHTTPClient: [AFHTTPClient clientWithBaseURL: [NSURL URLWithString: @" https://api.somewhere.com "]]];' – GivP

2

Uważaj!

Użyłem zaakceptowanej odpowiedzi dla RestKit 2.0, ale niestety to prowadzi do trudnego do debugowania awarii w restkit. To, co zadziałało, polegało na zamknięciu całego tworzenia deskryptorów i innych ustawień menedżera obiektów w metodzie i wywołaniu tego za pomocą nowego obiektu menedżera obiektów przed wywołaniem [RKObjectManager setSharedManager: newManager];

+0

Tak, jedynym sposobem jest odbudowanie RKObjectManager i wszystkich względnych ustawień. – saiday

Powiązane problemy