2012-05-08 10 views
6

È possibile modificare l'URL di base di RKObjectManager dopo la creazione?RestKit: modifica l'URL di base di RKObjectManager

I have login box e da nickname decido quale URL utilizzare per API. Se creo RKObjectManager dopo aver inserito nick/password, posso effettuare una sola chiamata da RestKit (https://groups.google.com/forum/?fromgroups#!topic/restkit/wFNhpCW-URA). Se creo la funzione RKObjectManagerviewDidLoad - Non riesco a modificare l'URL.

C'è la stessa soluzione al mio problema?

Grazie.

risposta

12

appena trascorso un po 'per capire come questo può essere fatto in v0.20. Da quello che posso dire, non è possibile modificare direttamente l'URL di base senza entrare nel codice sorgente di AFNetworking. È possibile creare un nuovo HTTPClient e impostarlo, ma ho trovato che questo ha causato ancor più problemi, presumibilmente perché RestKit sta facendo eseguire ulteriori configurazioni sul AFNetworking di HTTPClient quando si imposta la RKObjectManager, e impostando il cliente direttamente che si sta perdendo quella.

Mi è venuta in mente questa soluzione, che è quella di creare un altro RKObjectManager con il nuovo database di base e aggiungere nuovamente i descrittori. Dovrai inoltre impostare nuovamente la serializzazione e i tipi di intestazione.

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

Documentazione correlata: Using Multiple Base URLs in RestKit

+0

sul serio? devi aggiungere nuovamente tutti i descrittori solo per cambiare baseUrl? EDIT: Ok dopo aver letto la documentazione vedo perché, perché non vuoi cambiare l'URL di base mentre le richieste sono ancora in esecuzione, ecc. Quindi immagino di implementare il codice precedente e andare avanti con esso .. – deepwinter

1

Non penso che ci sia una soluzione per questo. RestKit utilizza internamente l'URL di base e non può essere modificato.

5

Ecco il modo per cambiare il RestKit baseURL dopo init:

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

comunicazione da RestKit doc:

Modifica della baseURL ha l'effetto collaterale di causare l'istanza requestCache essere ricostruito. Le cache vengono gestite in base all'host.

Io lo uso e funziona bene :)

+0

Come è fatto in RestKit v0.20? –

+0

Questo funziona per me in RestKit v0.20: '[[RKObjectManager sharedManager] setHTTPClient: [client AFHTTPClientWithBaseURL: [NSURL URLWithString: @" https://api.somewhere.com "]]];' – GivP

2

Be Careful!

Ho usato la risposta accettata per RestKit 2.0, ma sfortunatamente questo ha causato un arresto anomalo del debug all'interno del restkit. Ciò che ha funzionato è stato solo incapsulare tutte le impostazioni del descrittore e di altre impostazioni di objectmanager in un metodo e chiamarlo con il nuovo object manager object prima di chiamare [RKObjectManager setSharedManager: newManager];

+0

Sì, l'unico modo è ricostruire il tuo RKObjectManager e tutte le impostazioni relative. – saiday

Problemi correlati