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

Posted

技术标签:

【中文标题】具有多对多关系的核心数据 NSPredicate【英文标题】:Core Data NSPredicate with to-Many Relationship 【发布时间】:2013-03-30 20:03:15 【问题描述】:

我在 CoreData 中有两个实体,分别称为 User 和 Coupon,它们是多对多关系。我想获取除 user.userId = 1 拥有的所有优惠券之外的所有优惠券,其中 userId 是 NSString。

我用过: [NSPredicate predicateWithFormat:@"NOT(ANY couponOwners.userId = %@)", @"4"]; 成为我的 fetchedResultsController 的谓词

但没有过滤出正确的结果。 Coupon 的 couponOwners 中的一位用户的 userId = 4。

有人可以帮忙吗?我已经被困了很长一段时间。提前致谢。

【问题讨论】:

【参考方案1】:

带有“NOT ANY”的核心数据谓词不起作用(这似乎是核心数据错误)。其实

[NSPredicate predicateWithFormat:@"NOT(ANY couponOwners.userId = %@)", @"4"];

返回与

相同的结果集
[NSPredicate predicateWithFormat:@"ANY couponOwners.userId != %@", @"4"];

这当然是错误的。作为一种解决方法,您可以使用 SUBQUERY:

[NSPredicate predicateWithFormat:@"SUBQUERY(couponOwners, $c, $c.userId == %@).@count == 0", @"4"]

【讨论】:

你真聪明。非常感谢。 @Martin R,我在形成正确的谓词时遇到问题,因为我看到你非常了解这个领域,你能帮忙解决这个问题吗? ***.com/questions/37464898/…?

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

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

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

从具有多对多关系核心数据iOS的上下文中删除nsmanagedboject

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

具有多对多关系的核心数据 - 在 SUBQUERY 中使用 ALL 创建 NSPredicate

具有多对多谓词的核心数据