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

Posted

技术标签:

【中文标题】如何递归加载RestKit中由外键标识的嵌套对象?【英文标题】:How to recursively load nested objects identified by foreign-key in RestKit? 【发布时间】:2015-06-16 13:47:54 【问题描述】:

我有一个独特的问题。我已经阅读 RestKit 文档好几天了,我很确定 RK 可以做到,我只是不确定如何设置。当我第一次登录时,我的 API 返回一个如下所示的联系人 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 的关系。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于如何递归加载RestKit中由外键标识的嵌套对象?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何使用 RestKit 将嵌套的 JSON 对象存储到核心数据中

Restkit:外键关系的存根

维护 RKObjectManager/AFHTTPClient 请求排序

Restkit:当外键引用Core Data中缺少的本地对象时获取远程链接对象

RestKit 将未嵌套关系映射到拥有对象