核心数据交叉引用两个关系

Posted

技术标签:

【中文标题】核心数据交叉引用两个关系【英文标题】:Core data cross referencing two relationships 【发布时间】:2012-07-25 10:53:47 【问题描述】:

我在 Core Data 中有一个像这样的数据结构......

用户

物品

类别

用户与 Item 实体有一个 toMany 关系“FavouriteItems”。 Category 与 Item 实体还有一个 toMany 关系“Items”。

用户可以从他们想要的任何类别中选择最喜欢的项目。目前我正在列出所有项目,然后在旁边显示类别。

我想做的是显示所选类别的所有用户最喜欢的项目。

即选择与类别 x 和用户 y 有关系的所有项目。

我目前正在通过一种关系(即 User.favouriteItems)获取所有项目,然后使用块谓词过滤 NSSet。

是否可以使用简单的 CoreData 谓词来做到这一点?

嗯...想一想会是这样的谓词...

[NSPredicate predicateWithFormat:@"interestedUser.id = %@ AND category.id = %@", user.id, category.id];

然后在 item 实体上运行 fetch 请求?

这行得通吗?

【问题讨论】:

快速更新。它不喜欢谓词中使用的多对多关系。 【参考方案1】:

拍摄相当盲目,因为这是一个尴尬的场景,只是为了回答一个问题,但也许

如果您要过滤一组具有正确反向关系的项。

[NSPredicate predicateWithFormat:@"%@ IN interestedUsers AND %@ IN categories", 
                                 someUser, 
                                 someCategory];

基本上Item 有很多用户 (interestedUsers),所以我们说的是我们在这个集合中的用户。

同样,Item 有很多类别 (categories),所以我们说 AND 是我们在此集合中选择的类别。

【讨论】:

谢谢!一改就完美了。只有interestedUsers 是多对多的,类别是一对多的(即每个项目只有一个类别)。现在我知道了我可以创建谓词的 IN。谢谢!

以上是关于核心数据交叉引用两个关系的主要内容,如果未能解决你的问题,请参考以下文章

创建核心数据反向关系

映射核心数据关系的正确方法

e:应用重启后核心数据自引用关系丢失

iphone核心数据:无法删除具有一对多关系的数据

核心数据 - 找出两个对象之间是不是存在关系

iOS核心数据:存储与不同实体中任何NSManagedObject的关系