仅在父子实体具有 1 到 M 关系的核心数据中获取父实体的数据

Posted

技术标签:

【中文标题】仅在父子实体具有 1 到 M 关系的核心数据中获取父实体的数据【英文标题】:Fetch only Parent entity's data in Core Data where Parent Child entity has 1 to M relationship 【发布时间】:2018-04-08 07:29:56 【问题描述】:

我有 2 个实体。 国家地区。国家与地区之间存在一对多关系。如果我获取国家(通过 CountryID 谓词),它将返回具有所有相关区域的特定国家属性。

就我而言,我不需要区域数据(包含大量数据)。怎么可能?

按照线程说,NSFetchRequest 的 includesSubentities 可以做到这一点。但它不适合我!

Core data NSFetchRequest also fetches children objects of the Entity

【问题讨论】:

您能说明国家和地区是如何定义的吗?我不明白 country 是否是 region 的父实体,或者它们是否具有一对多关系。 Country to Region关系是1到M。可以称CountryRegion的父实体 i.stack.imgur.com/n41bf.png i.stack.imgur.com/Dq0dp.png 当然,我只是被标题弄糊涂了。 includeSubEntities 不只与继承相关吗? 只要不访问 Region 的任何属性,就不应该获取任何 Region 对象。 【参考方案1】:

NSFetchRequest 的默认值是 true returnsObjectsAsFaults,因此除非您更改了此属性,否则您的区域将仅是故障,而不是完整的对象。

您可以通过propertiesToFetch 属性仅提供您感兴趣的属性来进一步限制获取的数据。

您应该一如既往地警惕预优化;如果性能是一个问题,那么您可以查看它,但我怀疑即使获取数千个Regions 作为故障也会对性能产生影响。

【讨论】:

你是说用 fault fire 来获取。但我的查询不在这一点上。 我还说过,如果你不想要regions,那么不要在propertiesToFetch 中包含该属性。您要我扩展答案的那一部分吗?关键是除非您引用相关区域之一的属性,否则相关区域不会被获取,它们只是故障。

以上是关于仅在父子实体具有 1 到 M 关系的核心数据中获取父实体的数据的主要内容,如果未能解决你的问题,请参考以下文章

核心数据需要时间来插入具有获取实体的记录并设置为关系

核心数据父子关系

获取核心数据中一对多关系的计数

快速获取具有一对多关系的核心数据

核心数据:未在子实体上创建复合索引

具有父子关系的 2 个实体的 GraphQL 突变返回第二个实体的旧值