NSPredicate 与关系

Posted

技术标签:

【中文标题】NSPredicate 与关系【英文标题】:NSPredicate with relation 【发布时间】:2015-02-01 20:40:54 【问题描述】:

我在使用给定谓词获取所有核心数据实体时遇到问题。我的模型看起来像这样。 PlayerWeapon 具有一对多关系,PlayerMetadata 具有一对一关系

我想列出属于 Player 的所有 Weapons,该 selected 属性的 Metadata 设置为 true。

我用这个谓词

[NSPredicate predicateWithFormat:@"ALL player.metadata.selected == %@", @YES];

但我得到了错误

The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet.'

我做错了什么?

干杯, 一月

【问题讨论】:

【参考方案1】:

您应该修改您的查询。 'ALL' 和 'ANY' 关键字应该与许多关系一起使用。从玩家到武器,你有一对多的关系。但是,如果你反转关系,你会看到关系是多对一的。所以,每把武器只有一个玩家。

Player <---->> Weapon

Weapon <<---> Player

所以,如果你像这样改变你的谓词,它应该可以正常工作,

[NSPredicate predicateWithFormat:@"player.metadata.selected == %@", @YES];

【讨论】:

这行得通,谢谢。现在的问题是-[NSFetchedResultsControllerDelegate controllerDidChangeContent:]在选择的播放器改变时似乎没有被调用。

以上是关于NSPredicate 与关系的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 与关系

Objective-C:NSPredicate LIKE 不喜欢空格。是不是有用于替换空格的转义序列?

NSFetchResultsController w/ NSPredicate(关系)与基本 NSFetchRequest(包括图片)

NSPredicate 与 AND 在一对多关系中

NSPredicate:与日期iOS的to-Many关系

核心数据:过滤多对可能与 NSPredicate 的关系