4

2つのエンティティを使用するアプリでRestKit0.20.0rc1を使用しています。

  1. 「メモ」(NoteClass)。
  2. メモのコレクションを含む「セット」(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の終わりを示します。

4

1 に答える 1

1

あなたの例で複数の一致を防ぐ方法があることがわかりました(ここでの議論を参照してください)。

解決策が進行中ですが、これを修正するためのいくつかのオプションがあります。

  1. あいまいにならないように API の URL を変更する
  2. マップされた結果オブジェクトのタイプを確認し、予期しないオブジェクトを破棄します
  3. ディスカッション スレッドで提案されているように [RKResponseDescriptor matchesPath:] を変更します。

ただし、各ソリューションには独自の方法で欠陥があります。

于 2013-03-08T12:36:43.217 に答える