2つのエンティティを使用するアプリでRestKit0.20.0rc1を使用しています。
- 「メモ」(NoteClass)。
- メモのコレクションを含む「セット」(SetClass)。
私は次の2つの応答記述子を持っています(とりわけ):
// GET /sets/:setID/notes
// Get a set's notes. Response looks like this:
// {"notes": [ (array of NoteClass dictionaries) ],
// ...more stuff...
// }
RKResponseDescriptor *noteResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[NoteClass rkEntityMapping]
pathPattern:@"/sets/:setID/notes"
keyPath:@"notes"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[objectManager addResponseDescriptor:noteResponseDescriptor];
// GET /sets/:setID
// Get information about a set. Response looks like this:
// {"name": "My Set",
// "numNotes": 3,
// ...more stuff...
// }
RKResponseDescriptor *setResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[SetClass rkEntityMapping]
pathPattern:@"/sets/:setID"
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[objectManager addResponseDescriptor:setResponseDescriptor];
「/sets/:setID / notes」をリクエストすると、noteResponseDescriptorが一致します(予想)。ただし、setResponseDescriptorも一致します(予期しない)。これは、応答記述子のパスパターンがサブストリング "/ sets /:setID"と一致し、キーパスがnilであるためだと思います。その結果、リクエストを行うと、返されるRKMappingResultには、NoteClassオブジェクトの配列(予期されたもの)と単一の空のSetClassオブジェクト(予期されないもの)が含まれます。
setResponseDescriptorがこのノートエンドポイントと一致しないようにするにはどうすればよいですか?(まだ)setResponseDescriptorにキーパスを追加できないので、「match / sets /:setID $」のように言うことができるソリューションを好みます。ここで、「$」はURLの終わりを示します。