0

過去に、すべての RKResponseDescriptor とすべての RKObjectManager の get/post/patch/delete メソッドにパス パラメーターを指定しました。これは機能しますが、これを行うには RKRouter がより優れた、よりモジュール化された方法のようです。

ネストされた変数を含む動的ルートの設定に問題があります。例えば:

ルートの追加

RKRoute *locationsRoute = [RKRoute routeWithClass:[Location class]     pathPattern:@"users/:userID/locations/:locationID" method:RKRequestMethodAny];
[[RKObjectManager sharedManager].router.routeSet addRoutes:@[locationsRoute]];

応答記述子の設定

 RKResponseDescriptor *locationResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:locationResponseMapping
                                                                                          method:RKRequestMethodAny
                                                                                     pathPattern:nil
                                                                                         keyPath:nil
                                                                                     statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

オブジェクト マネージャー呼び出しの実行

[[RKObjectManager sharedManager] getObject:[Location class] path:nil parameters:nil success:nil failure:nil];

ルーターを使用する前に、オブジェクト マネージャーの呼び出しパスにユーザー ID を含めます。(のように: path:[NSString stringWithFormat:@"users/%@/locations/%@", [self getCurrentUser].userID, location.locationID])。ただし、ルーターを使用する場合、それを指定する方法がわかりません。これを行う正しい方法は何ですか?ユーザー ID をルート パスにハード コードする必要がないことを願っています。

すべてのマッピングが適切に設定されていることに注意することが重要です。ルートを実装する前に、すべてが問題なく機能していました。どんな助けでも大歓迎です!

4

2 に答える 2

1

あなたのルートは問題ありませんが、これは間違っています:

[[RKObjectManager sharedManager] getObject:[Location class] ...

Location(クラス オブジェクトではなく) クラスのインスタンスを渡す必要があり、そのインスタンスにはルート パス パターンに挿入できるように属性を設定するuserID必要があるためです。locationID

于 2014-01-14T18:50:12.250 に答える
0

Wainの答えを念頭に置いて、1つのオブジェクトに対して複数の異なるルートが必要になりました。そのインデックスは関係ベースのルートです。例えば:

索引

RKRoute *locationIndexRoute = [RKRoute routeWithRelationshipName:@"locations" objectClass:[User class] pathPattern:@"users/:userID/locations" method:RKRequestMethodGET];

[[RKObjectManager sharedManager] getObjectsAtPathForRelationship:@"locations" ofObject:[self getCurrentUser] parameters:nil success:nil failure:nil];

アップデート

RKRoute *locationUpdateRoute = [RKRoute routeWithClass:[Location class] pathPattern:@"users/:userID/locations/:locationID" method:RKRequestMethodPATCH];

[[RKObjectManager sharedManager] patchObject:location path:nil parameters:nil success:nil failure:nil];
于 2014-01-14T21:33:08.650 に答える