RestKit:使用Nil密钥路径构建关系

时间:2013-07-18 08:56:42

标签: objective-c restkit object-object-mapping

我有两个班级

  • 作者有属性id,论文(论文关系),......
  • 具有属性id,mainAuthor(作者关系),作者(作者关系)......
  • 的论文

并希望将一些JSON映射到它

"authors": [
    {
        "id": 123,
        "papers": [
            {
                "id": 1,
                "main_author_id": 123,
                ...
            },
            ...
        ]
    },
    ...
]

问题是JSON的结构不像

"authors": [
    {
        "id": 123,
        "papers": [
            {
                "id": 1,
                "main_author": {
                    "id": 123
                }
                ...
            },
            ...
        ]
    },
    ...
]

这样我就可以轻松映射事物(注意两个JSON示例的* main_author *部分)。我尝试使用映射此值而没有关键路径here

[authorMapping addAttributeMappingToKeyOfRepresentationFromAttribute:@"main_author_id"];
[authorMapping addAttributeMappingsFromDictionary:@{@"(main_author_id)": @"id"}];

但是我收到错误,告诉我keyPath id 已经存在,我可能不会为此keyPath添加第二个映射。我完全理解这个错误,但我不知道如何从* main_author_id *映射回 id 。更改数据源可能是最佳解决方案,但遗憾的是,这是不可能的。

非常欢迎任何建议!谢谢!

2 个答案:

答案 0 :(得分:1)

这正是外键映射的用途。它允许您临时存储您提供的“身份”值,然后RestKit将找到适当的对象并完成关系。

答案 1 :(得分:0)

除了提供的Answer @Wain(外键映射)之外,还可以实现自定义序列化(c.f。RKSerialization)并在映射发生之前修改对象。但是,上述方法优于这种(某种程度上难看的)解决方案。