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

How to recursively load nested objects identified by foreign-key in RestKit?

我有一个独特的问题。几天来我一直在阅读 RestKit 文档,我很确定 RK 可以做到,我只是不确定如何设置。当我第一次登录我的 API returns 联系人 JSON 时,如下所示,我需要加载引用但未嵌套的组和团队。如果可能的话,我真的需要在保存 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"
}

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

我已经能够让我的 CoreData 实体 Contact 进行映射和保存。我为 current_groupid 关系苦苦挣扎,当我找到 1787 并听从它的建议时,终于让它没有崩溃。但是,它仍然被保存为 nil,所以我还是做错了......

    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"])

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

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

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