2012-05-08 11 views
6

作成後にベースURLをRKObjectManagerに変更することはできますか?RestKit:RKObjectManagerのベースURLを変更する

私はログインボックスを持っており、ニックネームからAPI用のURLを使用する必要があります。ニックネーム/パスワードを入力してRKObjectManagerを作成すると、RestKit(https://groups.google.com/forum/?fromgroups#!topic/restkit/wFNhpCW-URA)からの呼び出しを1回だけ行うことができます。 RKObjectManagerviewDidLoad機能を作成するとURLを変更できません。

私の問題と同じ解決策はありますか?

ありがとうございました。

答えて

12

はただ、これはv0.20で行うことができる方法を考え出すしばらく過ごした私はそれを使用し、それが正常に動作します。私が知る限り、AFNetworkingソースコードに入らずに直接ベースURLを変更することはできません。 新しいHTTPClientを作成して設定しましたが、おそらくRestkitがをセットアップしたときにAFKetworkingのHTTPClientでいくつかの追加設定をしていて、クライアントを直接設定しているためそれ。

このソリューションは、新しい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を変更したくないため、理由を参照してください、ドキュメントを読んだ後OK。 – deepwinter

1

私はそこに解決策がないと思います。 RestKitはベースURLを内部的に使用し、変更することはできません。ここ

5

は、init後RestKit baseURLを変更する方法である:RestKitドキュメントから

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

注意:

のbaseURLがあることが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内のクラッシュをデバッグするのが難しいことにつながります。機能したのは、記述子の作成やその他のオブジェクトマネージャ設定をすべてメソッドにカプセル化し、[RKObjectManager setSharedManager:newManager]を呼び出す前に新しいオブジェクトマネージャオブジェクトで呼び出すことでした。

+0

はい、唯一の方法は、RKObjectManagerとすべての相対セットアップを再構築することです。 – saiday

関連する問題