过滤具有一对一关系的NSmanagedObject的NSArray

Filtering NSArray of NSmanagedObject with one-to-may relationship

我有3个实体,"Bar","Waiter","Product"关系如下, "Bar" 与 "Waiter" 具有一对多关系,从 Waiter 到 Product 也是如此。

我有一组在酒吧工作的服务员,我想根据他们是否提供某种产品来过滤服务员。

我正在尝试过滤酒吧中所有服务员的数组,[bar.toWaiter allObjects]

到目前为止我已经尝试过:

NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"toProduct.endSaleDate > %@ AND toProduct.published == YES", [NSDate date]];

NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"ANY toProduct.endSaleDate > %@ AND ANY toProduct.published == YES", [NSDate date]];

我只想要那些拥有 "published" 为 YES 和 endSaleDate 的 Product 的服务员。我得到的是已发布产品或具有未来日期的产品的服务员。

我怎样才能实现我想要的。

谢谢!

谓词好像解释为"give me waiters which have ANY published product and ANY product with a future date"。但它并不要求相同产品满足两个条件。

您可以使用 SUBQUERY 来确保:

[NSPredicate predicateWithFormat:"@"SUBQUERY(toProduct, $product, $product.published == 1 AND $product.endSaleDate > %@).@count > 0"];