REST API で ID リクエストによる検索を実行しようとしています。RestKit 0.20 を使用しています。Location オブジェクトがあります。id 属性があります。「/locations/:id」に GET リクエストを送信し、完全なオブジェクトを JSON として受け取りたいと考えています。バックエンドがあり、動作しています。現在、iOS クライアント コードを作成しようとしています。
ここに私が持っているものがあります:
RKObjectManager* m = [RKObjectManager sharedManager];
RKObjectMapping* lmap = [RKObjectMapping requestMapping];
[lmap addAttributeMappingsFromArray:@[@"id"]];
RKRequestDescriptor* req = [RKRequestDescriptor requestDescriptorWithMapping:lmap objectClass:[Location class] rootKeyPath:nil];
[m addRequestDescriptor:req];
Location* l = [[Location alloc] init];
l.id = [NSNumber numberWithInt:177];
[m getObject:l path:@"locations/:id" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSLog(@"LOADED: %@", [mappingResult firstObject]);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"FAILED");
}];
上記のコードを実行した後、Restkit はパスの ':id: を Location オブジェクトに設定された ID 属性に置き換えません。
私が間違っていることについて何か考えがありますか?
アップデート:
Location クラスには、要求記述子と応答記述子の両方を設定しました。find_by_id リクエスト用にルートを追加しましたが、それはクラス ルートではなく名前付きルートでした。getObject:path:parameters:success:failure メソッドを使用すると、ルーターは「id」プレースホルダーを埋めませんでした (名前が「id」、「object_id」、「identity」などであるかどうかに関係なく)。
私が見つけた解決策はこれです:
- 名前付きルートを引き続き使用しますが、代わりに getObjectsAtPathForRouteNamed:object:parameters:success:failure メソッドを使用します
- Class Route を使用し、引き続き getObject:path:parameters:success:failure メソッドを使用します
私が抱えていた問題は、次のように NamedRoute を使用する場合でした。
RKRoute * route = [RKRoute routeWithClass:className pathPattern:path method:RKRequestMethodFromString(method)];
[objectManager.router.routeSet addRoute:route];
getObject:path:parameters:success:failure メソッドを使用してオブジェクトをクエリしても、ルーターは URL パスのプレースホルダーを埋めませんでした。