2012-05-08 43 views

回答

12

剛用了一會兒搞清楚如何在v0.20完成。從我所知道的情況來看,您無法直接更改基本URL,而無需進入AFNetworking源代碼。你可以創建一個新的HTTPClient並設置它,但我發現這導致更多的問題,大概是因爲RestKit在AFNetworking的HTTPClient上做了一些額外的配置,當你設置RKObjectManager,並通過設置客戶端直接你錯過了那。

我想出了這個解決方案,它是用新的baseURL創建另一個RKObjectManager並重新添加描述符。您還需要重新設置序列化和標題類型。

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

相關文檔:Using Multiple Base URLs in RestKit

+0

嚴重嗎?您必須重新添加所有描述符才能更改baseUrl?編輯:好吧,閱讀文檔後,我明白了爲什麼,這是因爲你不想在請求仍在運行時更改基礎URL等等。所以我想只是實現上面的代碼並繼續使用它.. – deepwinter

1

我不認爲有這個解決方案。 RestKit在內部使用基本URL,不能更改。

5

這裏是初始化後,改變RestKit baseURL方式:

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

從RestKit DOC聲明:

更改基本URL具有使requestCache 實例是邊效應重建。緩存保持每個主機的基礎。

我使用它,它工作得很好:)

+0

這是如何在RestKit v0.20中完成的? –

+0

這適用於RestKit v0.20: '[[RKObjectManager sharedManager] setHTTPClient:[AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@「https://api.somewhere.com」]]];' – GivP

2

小心!

我使用了RestKit 2.0的接受答案,但不幸的是這導致難以在restkit中調試崩潰。有效的方法是將所有描述符創建和其他objectmanager設置封裝到一個方法中,然後在調用[RKObjectManager setSharedManager:newManager]之前使用新的對象管理器對象調用它;

+0

是的,唯一的方法是重建你的RKObjectManager和所有相關的設置。 – saiday