【问题标题】:RestKit: how to define optional (nested) keypathsRestKit:如何定义可选(嵌套)键路径
【发布时间】: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 分支。

标签: objective-c ios restkit


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    相关资源
    最近更新 更多