RestKit:如何定义可选(嵌套)键路径

Posted

技术标签:

【中文标题】RestKit:如何定义可选(嵌套)键路径【英文标题】:RestKit: how to define optional (nested) keypaths 【发布时间】:2012-01-02 10:56:25 【问题描述】:

我有一个类似 JSON 的结构


   "objects":
      "person":[
         
            "id":"1",
            "name":"my name"
            "contacts":
               "address":
                  "id":"1",
                  "street":"mystreet",
                  "country":"mycountry"
               ,
               "email":
                  "id":"1",
                  "emailAddress":"hello@hello.com"
               
            ,
         ,
...

我正在尝试通过以下方式对其进行映射:

[personMapping mapKeyPath:@"contacts.address" toRelationship:@"address" withMapping:addressMapping];

只要存在联系人,此方法就可以正常工作。但是如果没有地址/电子邮件,则不会发送此元素,这会导致RKMappingOperation#applyRelationshipMappings 中的异常: value = [self.sourceObject valueForKeyPath:relationshipMapping.sourceKeyPath];

目前,我的解决方法是使用@try...@catch,但我希望有更好的解决方案...

非常感谢!

编辑:如果根本没有发送联系人,则会发生异常;然后,JKDictionary 看起来像这样(再次在 RKMappingOperation#applyRelationshipMappings 中):


    contacts = "";
    name = myName;
    id = 1;
    ...

【问题讨论】:

抛出的异常是什么?另外,您使用哪个 RestKit 版本? @mja: 0.9.3版,例外是[<__NSCFConstantString 0x3fe1bc> valueForUndefinedKey:]: this class is not key value coding-compliant for the key address. 我在我的一个基于 RestKit 的项目中尝试了类似的案例,我没有任何例外。不过,我使用来自 git,master 分支的最新 RestKit。请尝试以下操作(以检查您是否遇到相同的异常):将关系映射添加到不存在的键,例如。 “contacts.whatever”(保持所有映射不变)并解析包含地址和电子邮件的 JSON。 @mja 感谢您的评论;请看我的编辑...我认为我们的方式很好:) 我建议你尝试最新的 git/master 分支。 【参考方案1】:

也许您应该在实例化对象时正确初始化它们?也许从你所有的属性零开始;然后随着您填写属性;在您提交(或映射或其他)之前,检查您的属性值的数据完整性..

【讨论】:

以上是关于RestKit:如何定义可选(嵌套)键路径的主要内容,如果未能解决你的问题,请参考以下文章

iOS Restkit:如何解析嵌套路径

RestKit 0.20.1 复合键和嵌套关系

Restkit 在嵌套的外键关系中使用 @parent

RestKit 0.20 嵌套对象映射(对象树的路径不同)

如何使用 REST kit for Objective-C 请求嵌套资源

RestKit - 将数组的键路径映射到该数组内的对象