核心数据。加入 2 个具有多对多关系的表?

Posted

技术标签:

【中文标题】核心数据。加入 2 个具有多对多关系的表?【英文标题】:Core Data. Join 2 tables with many-tomany relationship? 【发布时间】:2013-09-24 09:48:48 【问题描述】:

我有 2 个表,它们之间通过多对多关系链接。

不存在等效的 SQL,因为它需要第三个表将多对多关系拆分为两个一对多关系。

例如,我有两个核心数据实体:具有属性的类别(项目数组)和具有属性的项目(类别数组)。

我需要获取除“空”类别之外的所有类别(当没有此类别的项目时)。

我当前的临时解决方案看起来不正确。我使用 NSFetchRequest 来获取所有类别。然后我使用 for-each 手动从这个数组中删除所有具有空项数组的类别。

【问题讨论】:

【参考方案1】:

为了获取除空类别之外的所有类别,您可以使用如下谓词:

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Category"];    
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"items.@count > 0"];
NSArray *categories = [context executeFetchRequest:fetchRequest error:NULL];

【讨论】:

你自己试过了吗?由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“此处不允许使用多对多键”,这对我来说是个问题 对不起,错字。它应该是 items.@count 而不是 items.count【参考方案2】:

我的解决方案:

[NSPredicate predicateWithFormat:@"ANY items != nil"]

【讨论】:

以上是关于核心数据。加入 2 个具有多对多关系的表?的主要内容,如果未能解决你的问题,请参考以下文章

通过 HTTP 导入核心数据,具有多对多关系

预加载具有多对多关系的核心数据的最佳实践

Hibernate Annotation - 如何连接三个具有多对多关系的表

具有多对多关系的核心数据 NSPredicate

两个以上具有多对多关系的表[重复]

将对象添加到具有多对多关系的核心数据中的 NSSet