NSPredicate和核心数据:在关系中检索对象

时间:2012-02-17 17:05:25

标签: ios core-data entity-relationship nspredicate nsfetchrequest

我有一个Core Data模型结构,如下所示:

Product <-->> OrderProduct where the relationship (from Product to OrderProduct) is called productOrders while the inverse is called product

Order <-->> OrderProduct where the relationship is called orderProducts while the inverse is called order

Client <-->> Order where the relationship is called orders while the inverse is called client

UIViewController内,我使用与以下谓词相关联的NSFetchRequest

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"(ANY productOrders.order.client.code == %@)", clientCode];

谓词效果很好。我能够检索与特定客户关联的一个(或多个)订单的产品。

现在我必须再添一步。查找特定客户的最后一个订单(按日期排序)。我已经尝试了以下谓词,但它不起作用:

  NSPredicate* predicate = [NSPredicate predicateWithFormat:@"(ANY productOrders.order.client.code == %@ AND productOrders.order.@max.orderDate)", clientCode];

其中orderDate的类型为NSDate

我必须使用SUBQUERY吗?我怎样才能做到这一点?提前谢谢。

2 个答案:

答案 0 :(得分:2)

您可以在fetchrequest上使用sortDescriptor(fetchrequest采用sortdescriptors数组)。

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"productOrders.order.orderDate" ascending:NO];

[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];

编辑:请参阅NeverBe评论

答案 1 :(得分:1)

我能够解决从外部传递日期的问题。换句话说,我首先计算了特定客户端的最后订单日期,然后将其传递给感兴趣的元素(实现请求的元素)。

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"ANY productOrders.order.client.code == %@ AND productOrders.order.orderDate == %@", clientCode, lastDate];

我不知道是否可以正确但是有效。

希望它有所帮助。