私はRestKitをテストしており、異なるBaseUrlにアクセスする必要があり、時には異なる場所から同じbaseUrlを持つWebサービスに「一度に」アクセスする必要があります。最後に、同じコントローラー内の異なるressourcePathを持つ同じbaseUrlにもアクセスする必要があります。
私のアプリ デリゲートでは、このように RKObjectManager シングルトンをセットアップしました。
RKObjectManager *objectManager = [RKObjectManager objectManagerWithBaseURL:kBaseUrl];
[objectManager registerClass:[EntityClass1 class] forElementNamed:@"element1"];
[objectManager registerClass:[EntityClass2 class] forElementNamed:@"element2"];
.
.
.
etc.
シングルトン アプローチは非常に簡単に操作できますが、さまざまな Web サービス呼び出しを分離する方法がわかりません。
RKObjectLoaderDelegate を実装する MyViewController には、次の 2 つのメソッドがあります。
- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects {
//stuff with result
}
- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error {
//stuff with error
}
MyViewController が 1 つの RKObjectManager シングルトンを使用して 1 つの baseUrl を持つ 1 つの ressourcePath にアクセスする場合、これは問題を引き起こしません。
この方法で別のリクエストを開始した場合:
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:FLICKRPath delegate:self]
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:FOURSQUAREPath delegate:self]
など、同じ MyController 内で、FLICKRPath と FOURSQUAREPath にはもちろん異なる baseUrl がありますが、RKObjectManager には 1 つしかないという問題がありますか?
これが機能し、異なる RKObjectManagers を持つことができる場合、別の問題が発生します。デリゲート メソッドの didLoadObjects と didFailWithError は両方の RKObjectManagers から結果を受け取りますが、baseUrls 以外にそれらを区別する方法はありません。デリゲート メソッドで各戻り値を baseUrl と比較する可能性があり、さらに悪いことに ressourcePath と比較することは、私にはまったく魅力的ではありません。
異なる RKObjectManagers がある場合、それらに異なるデリゲートを渡し、異なる baseUrls と ressourcePaths からの戻り値を処理する専用のクラスを構築できると思います。これは、MyController と RestKit の上にさらに別の抽象化を構築する必要があったことを意味しますが、これも面倒です。
私はこれを間違った方法で行っていると強く感じています.RestKitソースは非常に印象的で、私がフレームワークと戦っていることを示しています. この件に関するベストプラクティスの洞察をいただければ幸いです。見つけたすべてのリソースと例を確認しましたが、上記の使用例は見たことがありません。常に 1 つの RKObjectManager、1 つの baseUrl、および 1 つの ressourcePath です。
前もって感謝します。