如何在RestKit中递归加载由外键标识的嵌套对象?

时间:2015-06-16 13:47:54

标签: restkit

我有一个独特的问题。我已经阅读了RestKit文档好几天了,我很确定RK可以做到这一点,我只是不确定如何设置。当我第一次登录我的API时,返回一个如下所示的Contacts JSON,我需要加载被引用但未嵌套的Group和Team。如果可能的话,我确实需要在CoreData上下文保存之前发生这些负载。

是否可以配置RestKit自动递归这些引用?如果没有,有关良好的一般方法的任何建议吗?

{
    "contactid": "003i0000016aiI8AAI",
    "signed_waiver": "1",
    "current_groupid": "T1Gj6mxcoXposmVUAA",
    "current_teamid": "T1Gj6mxcoXposmVU11",
    "createdby": "003i000001M4Y6fAAF",
    "created": "Fri, 16 Jan 2015 21:14:07 +0000",
    "updatedby": "003i0000016aiI8AAI",
    "updated": "Sat, 13 Jun 2015 15:13:35 +0000"
}

如果未设置waiver,current_groupid或current_teamid,我需要显示登机向导,如果他们然后我直接进入应用程序,然后需要加载有关组和团队的详细信息(名称,几何,成员等) )。我无法更改服务器API以直接嵌套此结构。

我已经能够将我的CoreData实体Contact映射并保存。我与current_groupid关系大力争吵,当我找到1787并遵循其建议时,我最终没有崩溃。然而,它仍然被保存为零,所以我仍然做错了...

    let mapping = RKEntityMapping(forEntityForName: "Contact", inManagedObjectStore: rkManagedObjectStore)
    mapping.identificationAttributes = ["apiID"]
    mapping.addAttributeMappingsFromDictionary([
        "contactid":        "apiID",
        "signed_waiver":    "signedWaiver",
        "current_groupid":  "rkCurrentGroupId",
        ])
    mapping.addConnectionForRelationship("currentGroup", connectedBy: ["rkCurrentGroupId": "apiID"])

为清楚起见,我的Contact实体具有上述所有内容的String属性以及连接到Group.currentCanvassers的currentGroup的关系。

1 个答案:

答案 0 :(得分:1)

不,它无法做到。 RestKit不会自动触发任何下载,这取决于您的代码。 RestKit接受您的请求并对其进行编码,然后处理响应以对其进行解码,并根据需要执行映射。

您可以在处理完成的代码中触发自动下载,或者在其他一些回调中更加混乱,但是您无法让保存等待它们完成。