【问题标题】:How to handle a one-to-many relationship in CORE DATA如何处理 CORE DATA 中的一对多关系
【发布时间】:2014-07-04 07:38:26
【问题描述】:

我在使用一对一和一对多关系的核心数据中遇到问题。

1.让我们考虑一个父实体P1 和子实体C1,C2,C3

2。 C3 还有 3 个子实体 C31,C32,C33

3。如果我在C32 表中更新、删除或更改,我将从服务器获取父P1 的完整JSON。

有什么方法可以更改特定父表的所有子表? 基本上,如果在子表中进行任何更新或删除或更改,我将从服务器获取一个包含所有子表详细信息的新父表。

有没有办法在核心数据中处理这个问题?

【问题讨论】:

    标签: ios core-data iphonecoredatarecipes


    【解决方案1】:

    除了在 Core Data 中处理关系之外,您的问题还在于如何使通过基于 JSON 的 API 公开的远程数据库与您的本地 Core Data 镜像保持同步。

    在您描述的场景中,天真的方法是:

    1. 您从服务器获得完整的 JSON;

    2. 通过这个,识别您的父实体(例如基于其 ID);

    3. 从本地数据库中删除父实体;如果你正确设置你的模型,所有的孩子也会被删除;

    4. 重新创建实体及其所有子实体。

    另一种可能的方法是获取完整的 JSON,然后将 JSON 中的每个子项与 Core Data 中的每个子项进行比较,并删除那些不存在于 JSON 中的子项。

    最后,您可以考虑RestKIT,这是一个可以为您完成所有这些工作的框架——还有一些学习曲线,但它会为您处理所有细节。

    【讨论】:

    • 核心数据是否有任何可以处理的属性。因为我的服务器端他们正在使用名为 orphanRemoval 的属性。
    • Hibernate 中的orphanRemoval 是完全特定于ORM 的东西。当不再从“父”实体引用时,它标记要删除的“子”实体,例如当您从父实体的相应集合中删除子实体时。
    • 我们在 coredata 中有类似的东西吗?
    • 恐怕CoreData里没有orphanRemoval这样的东西。如果它只是另一个属性,您可以将其添加到您的实体中并进行相应的管理(但不会自动为您完成)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多