我在使用 2 个实体的应用程序中使用 RestKit 0.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”匹配,并且因为键路径为零。结果,当我发出请求时,我得到的 RKMappingResult 包含一个 NoteClass 对象数组(预期)和一个空的 SetClass 对象(意外)。
如何防止 setResponseDescriptor 匹配此注释端点?我还不能向 setResponseDescriptor 添加关键路径,所以我更喜欢这样的解决方案,它允许我说“match /sets/:setID$”之类的内容,其中“$”表示 URL 的结尾。