如何防止多个RKResponseDescriptor匹配?

时间:2013-02-21 20:16:43

标签: restkit

我在使用2个实体的应用中使用RestKit 0.20.0rc1:

  1. “注意”(NoteClass)。
  2. “set”(SetClass),其中包含一组音符。
  3. 我有以下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的结尾。

1 个答案:

答案 0 :(得分:1)

原来现在有办法阻止你的例子多次匹配(参见讨论here)。

虽然解决方案正在进行中,但您可以通过以下几种方法解决此问题:

  1. 更改您的API网址,以免导致含糊不清
  2. 检查映射结果对象的类型并丢弃任何意外对象
  3. 按照讨论主题中的建议修改[RKResponseDescriptor matchesPath:]。
  4. 尽管每种解决方案都有其自身的缺陷。