如何处理 CORE DATA 中的一对多关系
Posted
技术标签:
【中文标题】如何处理 CORE DATA 中的一对多关系【英文标题】:How to handle a one-to-many relationship in CORE DATA 【发布时间】:2014-07-04 07:38:26 【问题描述】:我在使用一对一和一对多关系的核心数据中遇到问题。
1.让我们考虑一个父实体P1
和子实体C1
,C2
,C3
。
2。 C3
还有 3 个子实体 C31
,C32
,C33
。
3。如果我在C32
表中更新、删除或更改,我将从服务器获取父P1
的完整JSON。
有什么方法可以更改特定父表的所有子表? 基本上,如果在子表中进行任何更新或删除或更改,我将从服务器获取一个包含所有子表详细信息的新父表。
有没有办法在核心数据中处理这个问题?
【问题讨论】:
【参考方案1】:除了在 Core Data 中处理关系之外,您的问题还在于如何使通过基于 JSON 的 API 公开的远程数据库与您的本地 Core Data 镜像保持同步。
在您描述的场景中,天真的方法是:
您从服务器获得完整的 JSON;
通过这个,识别您的父实体(例如基于其 ID);
从本地数据库中删除父实体;如果你正确设置你的模型,所有的孩子也会被删除;
重新创建实体及其所有子实体。
另一种可能的方法是获取完整的 JSON,然后将 JSON 中的每个子项与 Core Data 中的每个子项进行比较,并删除那些不存在于 JSON 中的子项。
最后,您可以考虑RestKIT,这是一个可以为您完成所有这些工作的框架——还有一些学习曲线,但它会为您处理所有细节。
【讨论】:
核心数据是否有任何可以处理的属性。因为我的服务器端他们正在使用名为 orphanRemoval 的属性。 Hibernate 中的orphanRemoval 是完全特定于ORM 的东西。当不再从“父”实体引用时,它标记要删除的“子”实体,例如当您从父实体的相应集合中删除子实体时。 我们在 coredata 中有类似的东西吗? 恐怕CoreData里没有orphanRemoval
这样的东西。如果它只是另一个属性,您可以将其添加到您的实体中并进行相应的管理(但不会自动为您完成)。以上是关于如何处理 CORE DATA 中的一对多关系的主要内容,如果未能解决你的问题,请参考以下文章
如何处理一对多关系中的嵌套 mongoose 查询和异步问题?
如何为一对多关系正确配置 Core Data 数据模型和 NSManagedObject?