如何递归加载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 将嵌套的 JSON 对象存储到核心数据中
维护 RKObjectManager/AFHTTPClient 请求排序