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

Posted

技术标签:

【中文标题】Restkit:当外键引用Core Data中缺少的本地对象时获取远程链接对象【英文标题】:Restkit: GET remote linked object when foreign key refers to missing local object in Core Data 【发布时间】:2013-10-08 14:45:25 【问题描述】:

我不知道 Restkit 是否能够下载本地不存在的对象,特别是当外键在 Core Data 中以一对一关系引用该丢失对象时。

举个例子: - 联系人 1 指的是公司 2

联系人 1 存在于本地数据库中,但公司 2 不存在

当用户在 UI 中检查联系人 1 的详细信息时,会执行联系人 1 的 GET

GET 返回一个 JSON,其中包含属性 company_id = 2 的其他联系详细信息

我已经通过外键约定设置了 Restkit,我将外键存储在联系人对象(companyID)中,并将其链接到存储在公司对象中的远程标识符(标识符):

[contactResponseMapping addConnectionForRelationship:@"forCustomer" connectedBy:@@"companyID" : @"identifier"]

在这种情况下,如果本地数据库中不存在实体(由 company_id 引用),我无法配置 restkit 来下载实体。

这可能吗?

另一种解决方法是覆盖 companyID 设置器并仔细检查实体是否存在,如果不下载实体,尽管这对我来说并不理想,因为我已经设置了一个引擎,每次编辑对象时都会收到通知并将其发布到服务器。这意味着我必须阻止线程执行,直到下载链接对象。

这种机制也称为延迟加载吗?或保湿实体? 我找不到任何其他类似的案例。

希望您能提供帮助,这有点疯狂。 非常感谢。

PS:我正在使用 restkit 0.21.0(即 Blake Watters 确认稳定的最新开发版本)

【问题讨论】:

【参考方案1】:

这不是 RestKit 当前提供的功能(可能是因为您讨论的问题类型)。

对于您的解决方法,请考虑您的引擎在关系编辑方面所做的事情 - 它们是如何被推回服务器的?他们总是被推吗?

另外,考虑为您的“外部”对象创建存根对象,以便至少始终存在一些表示(有几种方法可以做到这一点,您可以设置映射来完成任务)。然后,当您开始使用其中一个对象时,您可以对其进行水合/延迟加载。

另见Clarifying terminology : "Hydrating" an entity : Fetching properties from the DB。

【讨论】:

谢谢韦恩。有存根对象的想法似乎很巧妙,我该怎么做?那就是我应该连同联系人的 JSON 返回一个存根,对吗?我应该指定什么样的映射?类似于我假设的嵌套映射? 您已经获得了 id,因此对于有效的存根来说已经足够了。映射取决于数据结构。在主映射完成后,您可能需要启动自定义创建的映射操作(使用数据源)。或者您可以添加另一个带有 keypath 的响应描述符以导航到数据中。

以上是关于Restkit:当外键引用Core Data中缺少的本地对象时获取远程链接对象的主要内容,如果未能解决你的问题,请参考以下文章

两个端点结果之间的外键映射 RESTKIT Core Data

RestKit / Core Data:远程删除的实体不会从 Core Data 中删除

在 MS-Access 中,当外键不再存在时,如何在组合框中显示旧的外键?

仅当外键存在时才保存的标准方法是啥?

与 Core Data 和 RestKit 无关的关系

当外键也是主键时,在 MySQL 上出现外键错误? [复制]